【问题标题】:Avoid nested for loops in R避免在 R 中嵌套 for 循环
【发布时间】:2021-08-19 20:08:50
【问题描述】:

我有一个大数组要填充。蛮力的方法是使用嵌套的 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 &lt;- 3; size_2 &lt;- 2,我应该得到link &lt;- rbind(c(1,1,2,2,3,3),c(1,2,1,2,1,2))

size_1size_2 很小时(如我上面提供的示例),第二种方法有效。但是,对于实际大小,我收到此错误:“向量中的错误(“列表”,伽马(n + 1)):向量大小不能无限”。即使我将大小减小到 50,我也会收到此错误:“向量中的错误(“list”,gamma(n + 1)):指定的向量大小太大”。

所以,我想知道是否有任何关于如何适应这种情况的建议(避免嵌套的 for 循环)。任何想法都非常感谢!

【问题讨论】:

    标签: r for-loop permutation


    【解决方案1】:
    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
    

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 2012-06-25
    • 2017-08-27
    • 2017-11-11
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 2020-05-21
    • 2019-12-26
    • 1970-01-01
    相关资源
    最近更新 更多