【发布时间】:2011-03-12 16:25:17
【问题描述】:
我遇到了一个需要一个多小时才能运行的简单循环,需要帮助来加快它的速度。
基本上,我有一个 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 参数,这就是我不想重建矩阵或拆分它的原因。
非常感谢您的支持!
克里斯
【问题讨论】:
-
你确定有足够的空闲内存吗?
-
申请和朋友无关矢量化。
-
您的示例将创建另一个矩阵,其大小与您的原始矩阵相同。听起来您的工作空间内存不足 - 长度为 400000 的数字向量需要 3.1 Mb,而矩阵应该需要 94.6 Mb。
标签: r loops vectorization