【发布时间】:2015-05-05 17:13:37
【问题描述】:
我希望有人能够帮助我解决这个问题。我有一个包含 48 个向量的列表对象,每个向量的长度为 2,000,000 个观察值。下面是创建相同结构的代码,每个向量只有 100,000 个项目:
mtx_sim <- matrix(data = runif(48 * 100000), ncol = 48, nrow = 100000)
mtx_list <- as.list(data.frame(mtx_sim))
我想对列表中向量的每一行进行累积求和。但是,有一个规定,我只想对最后 30 个向量求和。例如,列表中的第 35 个向量应添加到前面的 34 个向量中。另一方面,列表中的第四个向量应该添加到前面的三个向量(向量编号为三、二和一)。这是我的代码示例,它依赖于 lapply 函数结合 rowSums,速度相对较慢:
start <- c(rep(1, times = 30), seq(2, 19, 1))
end <- seq(1,48,1)
system.time(xxx <- lapply(1:48, function(x)
rowSums(
matrix(
unlist(mtx_list[start[x]:end[x]]),
ncol = (end[x] - start[x] + 1)))
) )
user system elapsed
62.19 0.56 63.04
有人有优化代码的想法吗?
【问题讨论】:
标签: r vector add lapply sapply