我有一个列表(
myList
)列表(A
,B
,C
,D
),每个列表都有其他列表(a1
,a2
,a3
),其中看起来像这样。
scenarios <- LETTERS[1:4]
patterns <- c("a1", "a2", "a3")
myList <- list()
for(i in seq_along(scenarios)){
myList[[i]] <- list()
for(j in seq_along(patterns)){
myList[[i]][[j]] <- list()
}
names(myList[[i]]) <- patterns
}
names(myList) <- scenarios
myList
$A
$A$a1
list()
$A$a2
list()
$A$a3
list()
$B
$B$a1
list()
$B$a2
list()
$B$a3
list()
$C
$C$a1
list()
$C$a2
list()
$C$a3
list()
$D
$D$a1
list()
$D$a2
list()
$D$a3
list()
我需要上传的文件的路径名如下所示:
./path/A/a1_A_table.csv
我不确定如何循环遍历文件名,将组件分配给变量,然后将输出存储在列表中的相应位置。到目前为止,这是我的尝试。
myDfList <- list()
myDfList <- lapply(scenarios, function(scen){
i = 1
myDfList[scen] <- lapply(patterns, function(df){
p <- patterns[i]
read.csv(paste0("./path/", scen, "/", p, "_", scen, "_table.csv"), sep = ",", h = T, fileEncoding = "UTF-8-BOM")
i = i + 1
})})
我有点迷失,因为我不明白如何使用
lapply
迭代循环(如果可能并且有意义),或者如果我只是使用 for
循环。
如果你想保持相同的形状,你可以使用一对贴图。
Map(function(top, topname) {
Map(function(mid, midname) {
path <- paste0(".path/", topname,"/", midname,"_",topname, "_table.csv", sep=".")
path
# read.csv(path)
}, top, names(top))},
myList, names(myList))
由于我没有数据,所以这只是返回路径,但是您可以使用内部 Map 中的路径做任何您想做的事情。这回来了
$A
$A$a1
[1] ".path/A/a1_A_table.csv."
$A$a2
[1] ".path/A/a2_A_table.csv."
$A$a3
[1] ".path/A/a3_A_table.csv."
$B
$B$a1
[1] ".path/B/a1_B_table.csv."
$B$a2
[1] ".path/B/a2_B_table.csv."
$B$a3
[1] ".path/B/a3_B_table.csv."
$C
$C$a1
[1] ".path/C/a1_C_table.csv."
$C$a2
[1] ".path/C/a2_C_table.csv."
$C$a3
[1] ".path/C/a3_C_table.csv."
$D
$D$a1
[1] ".path/D/a1_D_table.csv."
$D$a2
[1] ".path/D/a2_D_table.csv."
$D$a3
[1] ".path/D/a3_D_table.csv."