避免在 R 中嵌套 for 循环
Avoid nested for loops in R
我有一个大数组,我想填充它。蛮力方法是使用嵌套的 for 循环,如下所示:
size_1 <- 26460; size_2 <- 1782; size_total <- size_1 * size_2; counter = 0
link <- array(0, dim = c(size_total, 2))
for (i in c(1:size_1)) { for (j in c(1:size_2)) { counter = counter + 1;
link[counter,1] <- i; link[counter,2] <- j }}
但是,由于我将在我的代码中(稍后)以重复的方式调用这些循环,因此它们需要相当长的时间才能成为 运行。所以,为了让它 运行 更快,我决定尝试另一种方法:
link <- rbind( sort( matrix( permn(1:size_1)[[1]], nrow = 1, ncol = size_total), decreasing = FALSE ),
array( permn(1:size_2)[[1]], dim = size_total) )
只是为了提供观点,对于 size_1 <- 3; size_2 <- 2
,我应该得到 link <- rbind(c(1,1,2,2,3,3),c(1,2,1,2,1,2))
。
第二种方法适用于 size_1
和 size_2
较小的情况(如我上面提供的示例)。但是,对于实际大小,我收到此错误:“向量错误(“列表”,伽玛(n + 1)):向量大小不能无限”。即使我将大小减小到 50,我也会收到此错误:“向量错误(“列表”,伽玛(n + 1)):指定的向量大小太大 ".
所以,我想知道是否有任何关于如何适应这个问题的建议(避免嵌套的 for 循环)。非常感谢任何想法!
rev(expand.grid(list(seq(size_2), seq(size_1))))
Var2 Var1
1 1 1
2 1 2
3 2 1
4 2 2
5 3 1
6 3 2
我有一个大数组,我想填充它。蛮力方法是使用嵌套的 for 循环,如下所示:
size_1 <- 26460; size_2 <- 1782; size_total <- size_1 * size_2; counter = 0
link <- array(0, dim = c(size_total, 2))
for (i in c(1:size_1)) { for (j in c(1:size_2)) { counter = counter + 1;
link[counter,1] <- i; link[counter,2] <- j }}
但是,由于我将在我的代码中(稍后)以重复的方式调用这些循环,因此它们需要相当长的时间才能成为 运行。所以,为了让它 运行 更快,我决定尝试另一种方法:
link <- rbind( sort( matrix( permn(1:size_1)[[1]], nrow = 1, ncol = size_total), decreasing = FALSE ),
array( permn(1:size_2)[[1]], dim = size_total) )
只是为了提供观点,对于 size_1 <- 3; size_2 <- 2
,我应该得到 link <- rbind(c(1,1,2,2,3,3),c(1,2,1,2,1,2))
。
第二种方法适用于 size_1
和 size_2
较小的情况(如我上面提供的示例)。但是,对于实际大小,我收到此错误:“向量错误(“列表”,伽玛(n + 1)):向量大小不能无限”。即使我将大小减小到 50,我也会收到此错误:“向量错误(“列表”,伽玛(n + 1)):指定的向量大小太大 ".
所以,我想知道是否有任何关于如何适应这个问题的建议(避免嵌套的 for 循环)。非常感谢任何想法!
rev(expand.grid(list(seq(size_2), seq(size_1))))
Var2 Var1
1 1 1
2 1 2
3 2 1
4 2 2
5 3 1
6 3 2