簡體   English   中英

避免在 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 size_1 <- 3; size_2 <- 2 ,我應該得到link <- rbind(c(1,1,2,2,3,3),c(1,2,1,2,1,2))

第二種方法適用於size_1size_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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM