我被一个简单的循环困住了,这个循环需要一个多小时才能运行,并且需要帮助来加快它的速度。
基本上,我有一个 31 列和 400 000 行的矩阵。前 30 列有值,第 31 列有列号。我需要每行检索第 31 列指示的列中的值。
示例行:[26,354,72,5987..,461,3] (这意味着第 3 列中的值被寻求 (72))
太慢的循环如下所示:
a <- rep(0,nrow(data)) #To pre-allocate memory
for (i in 1:nrow(data)) {
a[i] <- data[i,data[i,31]]
}
我认为这会起作用:
a <- data[,data[,31]]
...但它会导致“错误:无法分配大小为 2.8 Mb 的向量”。
我担心这是一个非常简单的问题,所以我花了几个小时试图理解 apply、lapply、reshape 等等,但不知何故我无法掌握 R 中的矢量化概念。
矩阵实际上有更多列也进入 a 参数,这就是我不想重建矩阵或拆分它的原因。
非常感谢您的支持!
克里斯