使用嵌套的foreach循环创建数据框列表

时间:2020-09-21 19:37:31

标签: r loops foreach nested-loops

这是我的代码:

library(foreach)
foreach (i = 1:5, .combine = 'list') %:%
    foreach (j = 1:10, .combine = 'rbind') %do% {
       cbind(round(rnorm(1),4), paste(i, j, sep = '.'), LETTERS[i+j]) 
    } 

我想看到的是一个包含五个元素的列表,其中每个元素都是由内循环创建的10行数据框。

[[1]]数据帧#1

[[2]]数据帧#2

[[3]]数据帧#3

相反,输出是包含两个元素的嵌套列表,如下所示:

[[1]] 2元素列表

[[1]] [[1]] 2元素列表

[[1]] [[1]] [[1]] 2元素列表

[[1]] [[1]] [[1]] [[1]]数据帧#1

[[1]] [[1]] [[1]] [[2]]数据帧#2

[[1]] [[1]] [[2]]数据帧#3

[[1]] [[2]]数据帧#4

[[2]]数据帧#5

如何使foreach循环正确附加?

2 个答案:

答案 0 :(得分:0)

尝试:

library(foreach)
foreach (i = 1:5) %do% {
  foreach (j = 1:10, .combine = 'rbind') %do% 
    cbind(round(rnorm(1),4), paste(i, j, sep = '.'), LETTERS[i+j]) 
  } 
#> [[1]]
#>       [,1]      [,2]   [,3]
#>  [1,] "-1.7924" "1.1"  "B" 
#>  [2,] "0.822"   "1.2"  "C" 
#>  [3,] "0.2779"  "1.3"  "D" 
#>  [4,] "2.0711"  "1.4"  "E" 
#>  [5,] "1.2373"  "1.5"  "F" 
#>  [6,] "-0.8168" "1.6"  "G" 
#>  [7,] "0.0823"  "1.7"  "H" 
#>  [8,] "-1.6213" "1.8"  "I" 
#>  [9,] "-0.7107" "1.9"  "J" 
#> [10,] "-1.9076" "1.10" "K" 
#> 
#> [[2]]
#>       [,1]      [,2]   [,3]
#>  [1,] "0.5223"  "2.1"  "C" 
#>  [2,] "0.3647"  "2.2"  "D" 
#>  [3,] "-1.0026" "2.3"  "E" 
#>  [4,] "2.0969"  "2.4"  "F" 
#>  [5,] "-1.2028" "2.5"  "G" 
#>  [6,] "-0.9095" "2.6"  "H" 
#>  [7,] "1.543"   "2.7"  "I" 
#>  [8,] "-0.3364" "2.8"  "J" 
#>  [9,] "0.9423"  "2.9"  "K" 
#> [10,] "0.5551"  "2.10" "L" 
#> 
#> [[3]]
#>       [,1]      [,2]   [,3]
#>  [1,] "-1.4515" "3.1"  "D" 
#>  [2,] "-1.9702" "3.2"  "E" 
#>  [3,] "0.458"   "3.3"  "F" 
#>  [4,] "1.7234"  "3.4"  "G" 
#>  [5,] "0.3744"  "3.5"  "H" 
#>  [6,] "-1.2371" "3.6"  "I" 
#>  [7,] "-0.1577" "3.7"  "J" 
#>  [8,] "1.2072"  "3.8"  "K" 
#>  [9,] "-0.1143" "3.9"  "L" 
#> [10,] "-1.6081" "3.10" "M" 
#> 
#> [[4]]
#>       [,1]      [,2]   [,3]
#>  [1,] "-1.0778" "4.1"  "E" 
#>  [2,] "1.2267"  "4.2"  "F" 
#>  [3,] "0.2161"  "4.3"  "G" 
#>  [4,] "-0.3156" "4.4"  "H" 
#>  [5,] "-0.0215" "4.5"  "I" 
#>  [6,] "0.5515"  "4.6"  "J" 
#>  [7,] "1.2866"  "4.7"  "K" 
#>  [8,] "-0.774"  "4.8"  "L" 
#>  [9,] "-0.9134" "4.9"  "M" 
#> [10,] "0.315"   "4.10" "N" 
#> 
#> [[5]]
#>       [,1]      [,2]   [,3]
#>  [1,] "0.3514"  "5.1"  "F" 
#>  [2,] "1.2512"  "5.2"  "G" 
#>  [3,] "0.7572"  "5.3"  "H" 
#>  [4,] "-0.9727" "5.4"  "I" 
#>  [5,] "-0.3072" "5.5"  "J" 
#>  [6,] "0.3907"  "5.6"  "K" 
#>  [7,] "-0.5655" "5.7"  "L" 
#>  [8,] "-0.8005" "5.8"  "M" 
#>  [9,] "-0.6386" "5.9"  "N" 
#> [10,] "0.0811"  "5.10" "O"

reprex package(v0.3.0)于2020-09-21创建

答案 1 :(得分:0)

使用基数R作为替代:

 .then(addScriptsToPackageJson)