在R中使用向量而不是for循环

时间:2013-11-15 21:21:37

标签: r for-loop vectorization

我有很长的代码行,我试图通过删除for循环来加快速度。当你有多个嵌套循环时,我会站起来,这会降低你的代码速度。我的原始代码包含3个循环,运行598,687和44次迭代。跑了大约15分钟。我使用此代码显示我正在运行的某些模型的输出,等待15分钟是不可接受的。我无法摆脱其中一个循环。我正在尝试使用向量,但它无法正常运行。让我们看看前10次迭代。

#data
flows=c(-0.088227, 0.73024, 0.39683, 1.1165, 1.0802, 0.22345, 0.78272, 0.91673, 0.53052, 0.13852)
cols=c(31, 31, 30, 30, 30, 30, 31, 31, 31, 31)
rows=c(3, 4, 4, 5, 6, 7, 7, 8, 9, 10)
dataset=matrix(0,33,44)
for (i in 1:10){dataset[rows[i],cols[i]]<-flows[i]+dataset[rows[i],cols[i]]}

#And this is my alternative(Not working)
dataset=matrix(0,33,44)
NoR=10
dataset[rows[1:NoR],cols[1:NoR]]<-flows[1:NoR]+dataset[rows[1:NoR],cols[1:NoR]]

请在此处查看问题。不知何故,列显示相同的行信息。 我在这里错过了什么?为什么第二个代码不能正确运行?

1 个答案:

答案 0 :(得分:2)

帮助解决可能存在的真正潜在问题有点困难,因为我猜我们在这里只看到了一小段代码。但我想也许你正在寻找这样的东西:

flow_mat <- matrix(0,33,34)
flow_mat[(cols - 1) * 33 + rows] <- flows

请记住,矩阵只是具有维度属性的向量。所以你可以像向量一样索引它们,想象索引从“左上角”开始并按列包围。