在R中高效绑定不同长度向量的末尾最小长度元素
解决方案
要实现你需要的效果,用base R就能简洁高效地完成,步骤如下:
先计算列表中向量的最小长度
n,用原生函数lengths()比sapply()更高效:n <- min(lengths(lV))用
lapply()遍历列表,对每个向量调用tail()取末尾n个元素,再通过do.call(cbind, ...)完成列绑定:do.call("cbind", lapply(lV, tail, n = n))
完整测试代码:
set.seed(123) v1 = rnorm(n = 5) v2 = rnorm(n = 4) v3 = rnorm(n = 3) lV = list(v1, v2, v3) n <- min(lengths(lV)) result <- do.call("cbind", lapply(lV, tail, n = n)) # 验证结果是否符合预期 expected <- cbind(v1[3:5], v2[2:4], v3) all.equal(result, expected) # 返回TRUE说明结果一致
方案优势说明
lengths()是R原生向量化函数,直接提取列表元素长度,比sapply(lV, length)的循环处理更快tail()是原生优化函数,取末尾元素的效率很高lapply()+do.call()的组合是base R中处理列表并合并的标准高效写法,和你熟悉的do.call("cbind", lV)风格完全一致
内容的提问来源于stack exchange,提问作者Mr Frog
相关产品推荐
相关产品推荐

