我想将数据帧名称列表转换为数据帧列表。
示例:
datalist <- list("mtcars","swiss","iris")
然后我想做类似
的事情for(i in 1:length(datalist)) {
datalist[[i]] <- parse(datalist[[i]])
}
因此,当我运行datalist[[i]]
时,我会看到与此相同的
> mtcars
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
而不是
> datalist[[i]]
"mtcars"
答案 0 :(得分:4)
mget
是适当的功能。它适用于对象名称的字符向量,并返回对象列表。我使用unlist
将您的列表转换为字符向量:
mget(unlist(datalist))
请注意,这不适用于示例中的内置数据框,除非(a)您将inherits
选项设置为TRUE
,如下所示:mget(unlist(datalist), inherits = TRUE)
或(b )它们已经被加载到全局环境中(例如,使用data()
)。
与此处提出的其他答案相比,mget
的一个优点是,使用对象的名称作为列表的名称创建结果列表。
答案 1 :(得分:2)
考虑使用get
:
datalist <- list("mtcars","swiss","iris")
dfList <- lapply(datalist, get)
for(i in 1:length(dfList)) {
print(head(dfList[[i]]))
}
# mpg cyl disp hp drat wt qsec vs am gear carb
# Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
# Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
# Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
# Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
# Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
# Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
# Fertility Agriculture Examination Education Catholic Infant.Mortality
# Courtelary 80.2 17.0 15 12 9.96 22.2
# Delemont 83.1 45.1 6 9 84.84 22.2
# Franches-Mnt 92.5 39.7 5 5 93.40 20.2
# Moutier 85.8 36.5 12 7 33.77 20.3
# Neuveville 76.9 43.5 17 15 5.16 20.6
# Porrentruy 76.1 35.3 9 7 90.57 26.6
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5.4 3.9 1.7 0.4 setosa
答案 2 :(得分:1)
而不是
parse(datalist[[i]])
使用:
eval(parse(text = datalist[[i]]))
您需要评估解析的输出。