使用嵌套的 foreach 循环创建数据框列表
Creating a list of dataframes with nested foreach 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]] dataframe #1
[[2]] dataframe #2
[[3]] dataframe #3
etc.
相反,输出是一个包含两个元素的嵌套列表,如下所示:
[[1]] 2-element list
[[1]] [[1]] 2-element list
[[1]] [[1]] [[1]] 2-element list
[[1]] [[1]] [[1]] [[1]] dataframe #1
[[1]] [[1]] [[1]] [[2]] dataframe #2
[[1]] [[1]] [[2]] 数据帧#3
[[1]] [[2]] 数据帧 #4
[[2]] 数据帧 #5
如何让 foreach 循环正确追加?
尝试:
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
使用 base R 作为替代:
lapply(
X = 1:5,
FUN = function(i) {
lst <- lapply(
X = 1:10,
FUN = function(j) {
cbind(round(rnorm(1), 4), paste(i, j, sep = "."), LETTERS[i+j])
}
)
Reduce(rbind, lst)
}
)
这是我的代码:
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]] dataframe #1
[[2]] dataframe #2
[[3]] dataframe #3
etc.
相反,输出是一个包含两个元素的嵌套列表,如下所示:
[[1]] 2-element list
[[1]] [[1]] 2-element list
[[1]] [[1]] [[1]] 2-element list
[[1]] [[1]] [[1]] [[1]] dataframe #1
[[1]] [[1]] [[1]] [[2]] dataframe #2
[[1]] [[1]] [[2]] 数据帧#3
[[1]] [[2]] 数据帧 #4
[[2]] 数据帧 #5
如何让 foreach 循环正确追加?
尝试:
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使用 base R 作为替代:
lapply(
X = 1:5,
FUN = function(i) {
lst <- lapply(
X = 1:10,
FUN = function(j) {
cbind(round(rnorm(1), 4), paste(i, j, sep = "."), LETTERS[i+j])
}
)
Reduce(rbind, lst)
}
)