2014-07-27 52 views
1

讓兩人dataframes通過清單名爲dataframes

df1<-data.frame(1,2) 
df2<-data.frame(3,4) 

建成並上市

list<-list(df1,df2) 

然後,dataframes的名字都沒有得到導入列表。然而,他們的名字出現,如果代碼更改爲

list<-list(df1=df1,df2=df2) 

然而,當我建立一個由數百dataframes的(從Quandl進口)的名單,這意味着很多額外的打字。有沒有更優雅的解決方案?

回答

2

mget查找在第一個參數中作爲字符向量給出的對象,並返回一個命名列表。您可以爲您提供所需的對象名稱的字符向量,或使用ls()使用正則表達式選擇您從Global Environment(默認情況下想要的對象,可以爲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 
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"