我正在使用以下方法来累积(即,首先选择前 2 个元素,然后每次添加 1 个元素;请参阅下面的输出)从下面的向量 mods
中选择元素。我想知道在 BASE R 中是否有更快或更简单的方法来执行此操作?
n <- names(mtcars) # BASE R dataset
lapply(seq_along(n)[-1], function(i)n[seq_len(i)]) # any faster or simpler approach here?
[[1]]
[1] "mpg" "cyl"
[[2]]
[1] "mpg" "cyl" "disp"
[[3]]
[1] "mpg" "cyl" "disp" "hp"
[[4]]
[1] "mpg" "cyl" "disp" "hp" "drat"
最佳答案
您可以使用Reduce
:
Reduce(c, n, accumulate=TRUE)
或者,从前两个元素开始:
Reduce(c, tail(n,-2), n[1:2], accumulate=TRUE)
恕我直言,它更简单,但速度并不快:
microbenchmark(
lapply=lapply(seq_along(n)[-1], function(i)n[seq_len(i)]),
Reduce=Reduce(c, n, accumulate=TRUE)
)
Unit: microseconds
expr min lq mean median uq max neval
lapply 10.2 10.6 22.056 10.8 11.0 1119.8 100
Reduce 10.1 10.4 10.865 10.6 10.8 17.5 100
关于r - 从 R 中的向量中累积选取元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58775742/