我有大约 200 个不同名称的数据框,我想创建一个包含所有这些数据框作为元素的列表。我已经创建了一个包含所有这些名称的字符向量,并尝试了 for 循环,但没有成功。有什么想法吗?
示例(不起作用):
wr1 <- data.frame(name = c("Maria","Nikos"), age = c("18","25"))
new <- data.frame(name = c("George","Marianna"), age = c("45","34"))
vage <- data.frame(name = c("Argyris","Nikos"), age = c("37", "26"))
the_names <- c("wr1","new", "vage")
new_list <- list()
for(i in length(the_names)){
something <- the_names[i]
new_list <- list(new_list,something)
}
列表已创建,但它只有 2 个元素(不是 3 个),其中包含数据框的字符名称,而不是数据框的字符名称。
我知道我做错了什么,但我卡住了!
答案 0 :(得分:1)
您可以改用 foreach
。对于这种情况,我使用 get
从环境中提取变量。由于 foreach
默认会生成一个列表,因此您有一个 data.frame 列表。
wr1 <- data.frame(name = c("Maria","Nikos"), age = c("18","25"))
new <- data.frame(name = c("George","Marianna"), age = c("45","34"))
vage <- data.frame(name = c("Argyris","Nikos"), age = c("37", "26"))
library(foreach)
the_names <- c("wr1", "new", "vage")
list_df <- foreach (name = the_names) %do% {
get(name)
}
# Assign names of data to the list
names(list_df) <- the_names
list_df
#> $wr1
#> name age
#> 1 Maria 18
#> 2 Nikos 25
#>
#> $new
#> name age
#> 1 George 45
#> 2 Marianna 34
#>
#> $vage
#> name age
#> 1 Argyris 37
#> 2 Nikos 26
由 reprex package (v2.0.0) 于 2021 年 5 月 27 日创建
答案 1 :(得分:1)
我有点想知道使用 for 循环的动机,为什么不list
把它放在一起?
wr1 <- data.frame(name = c("Maria","Nikos"), age = c("18","25"))
new <- data.frame(name = c("George","Marianna"), age = c("45","34"))
vage <- data.frame(name = c("Argyris","Nikos"), age = c("37", "26"))
new_list <- list(wr1, new, vage)
编辑:如果真的有必要从字符向量中获取它,以下也应该起作用:
new_list <- lapply(the_names, function(L) eval(parse(text = L)))
或者简单地说:
new_list <- mget(the_names)