2013-03-13 124 views
4

當然,我可以在我的列表中的所有手動命名對象是這樣的:如果我假設名稱很長的50個對象使用對象名稱作爲R中的列表名稱

#create dfs 
    df1<-data.frame(a=sample(1:50,10),b=sample(1:50,10),c=sample(1:50,10)) 
    df2<-data.frame(a=sample(1:50,9),b=sample(1:50,9),c=sample(1:50,9)) 
    df3<-data.frame(a=sample(1:50,8),b=sample(1:50,8),c=sample(1:50,8)) 

    #make them a list 
    list.1<-list(df1=df1,df2=df2,df3=df3) 

但它使大量的工作。 那麼有沒有什麼辦法可以使這個自動化,並使列表中的名稱與外部對象相同?

回答

8

查找名稱,然後致電mget
如果每個變量的名稱都有一個模式,那麼這很簡單。

var_names <- paste0("df", 1:3) 
mget(var_names, envir = globalenv()) #or maybe envir = parent.frame() 

如果命名系統更加複雜,你可以使用正則表達式來找到它們,使用類似

var_names <- ls(envir = globalenv(), pattern = "^df[[:digit:]]+$") 
+0

+1 MGET我總是忘了一個 – 2013-03-13 14:19:29

+0

,使得它。謝謝! – Joschi 2013-03-13 15:30:06

3

如果你只是想說出從環境中分享一些名稱的列表在這種情況下, 'df,可以':

names(list.1) <- grep("df",ls(),value=TRUE) 

如果你想你的環境推入一個列表:

list.1 <- globalenv() 
list.1 <- as.list(list.1) 

的逆過程看?list2env

+1

感謝10k! – 2013-03-13 22:22:27