首页 > 解决方案 > 从 R 中的向量中累积选择元素

问题描述

我正在使用以下来累积(即,首先选择前 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"

标签: rfunctionloopsdataframelapply

解决方案


你可以使用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

推荐阅读