【发布时间】:2016-12-13 14:14:01
【问题描述】:
我有 5 张桌子,我想找到一些满足某些要求的组合。我可以通过使用矩阵乘法创建所有可能的组合,然后选择满足我需要的行来轻松解决以下数据。问题是我最初的问题由 5 个表组成,每个表有 200 行。如果生成所有可能的组合,这需要几百 GB 的内存。
所以我尝试了这个:
x1 <- seq(1,10,1)
x2 <- seq(5,15,3)
x3 <- seq(2,11,1)
x4 <- seq(1,5,1)
x5 <- seq(1,20,2)
应该满足:x1
nm <- data.frame(matrix(NA,1,5))
for(a in 1:length(x1)){
for(s in 1:length(x2)){
for(d in 1:length(x3)){
for(f in 1:length(x4)){
for(g in 1:length(x5)){
l1 <- x1[a]
l2 <- x2[s]
if(l1 < l2){
l3 <- x3[d]
if(l1 < l3){
l4 <- x4[f]
l5 <- x5[g]
fy <- c()
fy[1] <- l1
fy[2] <- l2
fy[3] <- l3
fy[4] <- l4
fy[5] <- l5
nm <- rbind(nm, fy)
}}}}}}}
在我原来的问题中,我有更多的 if 语句,我希望这会提高速度。但是我现在已经运行了大约 24 小时,但仍然没有完成。上面的问题花了我大约 10 秒,这让我觉得它卡住了。
【问题讨论】:
-
R 经验法则:尽可能使用矢量化操作而不是循环。
-
为什么不用文字描述你想要做的事情,而不是向我们展示你是如何做到的。可能有更好的方法。或者可能没有。您是否计算过真实数据需要多少次迭代?
-
我又添加了一行,但没有看到缺少什么来理解文字中的问题。我的原始数据大概有200^5个组合,不知道有多少符合要求。
标签: r performance loops