【发布时间】:2012-03-23 08:28:48
【问题描述】:
我有一个双循环,我不仅不喜欢,而且需要 14 天才能在我的计算机上运行,因为它以大约 0.12 次迭代的速度运行超过 3200 条记录和 1090 个变量。
更小的可重现位。它只是检查两条记录之间的同一列中有多少数字,不包括 NA。然后它将结果附加到原始数据框。
y <- data.frame(c(1,2,1,NA,NA),c(3,3,3,4,NA),c(5,4,5,7,7),c(7,8,7,9,10))
resultdf <- NULL
for(i in 1:nrow(y))
{
results <- NULL
for(j in 1:nrow(y))
{
results <- c(results,sum((y[i,]==y[j,]),na.rm=TRUE))
}
resultdf <- cbind(resultdf,results)
}
y <- cbind(y,resultdf)
我有重复计算,可能需要 7 天才能避免。
如果我理解正确的话,C 中的一些应用函数可能会更快。不过,我还没有得到任何工作。我也很好奇是否有一个运行得更快的包。谁能帮忙加快计算速度?
谢谢!
【问题讨论】:
-
你应该先看看你能得到多少速度取行或列的总和,但我现在没有时间计算...
-
...我假设通过“重复计算”您正在谈论循环所有 (i,j) 而不仅仅是下三角形或上三角形...
-
更改为矩阵将整个过程加速到大约 16 分钟。谢谢你的提示!是的,它是重复计算而不是计算其中一个三角形。你会怎么做?我猜它在循环末尾添加 i
标签: performance r for-loop sum apply