我一直在处理几百个文件,我自动将其作为单独的数据框加载到工作区中(假设我的工作区中有500个数据框)。
我想创建一个包含工作空间中所有数据框/对象的列表,并在所有数据框/对象上应用函数。当然,我可以手动输入所有对象,但对数百或数千个数据帧来说效率不高。我想知道是否有任何方法可以使用ls()
函数的输出,例如:
ls()
[1] "a" "b" "c" "d"
[5] "e" "f" "g" "h"
[9] "i" "j" "k" "l"
[13] "m" "n" "o" "p"
...
不幸的是,当我从ls()
输出中提取时,我最终只得到字符串的字符向量而不是数据帧列表。
我很感激你的想法。感谢。
已编辑:以下页面How do I make a list of data frames in r提供了一些背景信息,但它没有回答我的问题,因为它不包含大量数据帧。
答案 0 :(得分:2)
是的,您可以使用ls
,Filter
和class
检索所有data.frame的名称。例如,假设您打开一个R会话并输入:
> df1=data.frame(col=1:10)
> df14=data.frame(col=1:10)
> rr=3
您使用以下命令检索data.frame
个名称:
dfnames=Filter(function(x) class(get(x))=='data.frame', ls(env=globalenv()))
#>dfnames
#[1] "df1" "df14"
您的data.frame
列表是:
> lapply(dfnames, get)
[[1]]
col
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
[[2]]
col
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
然后你可以用这个清单做你想做的事。
答案 1 :(得分:2)
,嗨,一拍:
m1 = mtcars
m2 = mtcars
m3 = 1:10
m4 = "blabla"
df_list <- mget(ls()[sapply(ls(), function(x) is.data.frame(get(x)))])
随意按几个步骤重新排列代码
答案 2 :(得分:1)
如果这些data.frames都在您的环境中,您可以这样做:
my_list=sapply(ls(),get)
如果您还有其他对象,并且不想将其合并到列表中,则可以使用grep()
选择感兴趣的数据框。