【发布时间】:2021-03-29 14:18:39
【问题描述】:
如果实际循环范围为 1000 秒,如何提高以下循环操作的速度? 在下面的代码中:
DF3= 数据框
OP 和 k 是 DF3 数据框中的两列。这里,k 取值从 1 到 10。
l1 <- seq(1, 10, 1)
E<-matrix(data=0, nrow=10, ncol=10)
for (i in seq_along(l1)){
for (j in seq_along(l1)){
E[i,j]=sum(ifelse (DF3$OP[DF3$k==i]<DF3$OP[DF3$k==j],1,0))
}
}
DF3 示例:
k OP
1 60
1 30
1 38
1 46
2 29
2 35
2 13
2 82
3 100
3 72
3 63
3 45
【问题讨论】:
-
为了更简单,这里有一些小建议: (1) 代替
seq(1, 2552, 1),您可以使用1:2552; (2) 不用seq_along(l1),直接用l1即可; (3),而不是sum(ifelse ( ... ,1,0)),只需从中删除ifelse()函数,因为对逻辑TRUE/FALSE 值求和与对1 和0 求和相同。 -
我认为你会因为一个太大而无法展示和/或只是“玩”的问题吓跑很多试图提供帮助的人。虽然我知道您想将其扩展到更大的尺寸,但在 更小的矩阵上显示可能会有所帮助,其比例为 10x10 而不是 2552x2552。
标签: r for-loop if-statement matrix