让
构建两个数据帧df1<-data.frame(1,2)
df2<-data.frame(3,4)
并列出
list<-list(df1,df2)
然后,数据帧的名称未导入列表。但是,如果代码更改为
,则会显示其名称list<-list(df1=df1,df2=df2)
但是,当我构建包含数百个数据帧(从Quandl导入)的列表时,这意味着需要进行大量的其他输入。有更优雅的解决方案吗?
答案 0 :(得分:2)
mget
在其第一个参数中找到作为字符向量给出的对象,并返回一个命名列表。您可以提供所需对象名称的字符向量,也可以使用ls()
使用正则表达式从 Global Environment
<中选择所需的对象/ em>(默认情况下,您可以为mget
指定其他环境以查找对象:
mget(c("df1","df2"))
#$df1
# X1 X2
#1 1 2
#$df2
# X3 X4
#1 3 4
使用正则表达式似乎非常适合您有数百data.frames
...
mget( ls( pattern = "df[0-9]+" ) )
#$df1
# X1 X2
#1 1 2
#$df2
# X3 X4
#1 3 4
答案 1 :(得分:0)
这是一种适用于长列表的方式。
> q <- quote(list(df1, df2))
> setNames(eval(q), as.character(q[-1]))
# $df1
# X1 X2
# 1 1 2
#
# $df2
# X3 X4
# 1 3 4
q
是一种无价值的表达方式。当我们在其上调用eval
时,它会被评估,我们可以将表达式转换为字符向量来获取名称。 setNames
很适合将名称应用于列表,因为它返回命名列表作为结果。
> q
# list(df1, df2)
> as.character(q)
# [1] "list" "df1" "df2"