2015-04-01 122 views
6

我試圖將一堆* .Rdata加載到列表中。將數據框加載到列表中

files <- paste0("name", 1:10, ".Rdata") 
data <- lapply(files, load) 

這將創建一個列表,其中每個元素都有數據框的名稱,但沒有其他的。

如果我重新定義文件,它僅包含第一個文件,並調用:

load(files) 

然後是「作品」,但在文件「文件」被asigned全球環境,這是不我想要什麼。

我想結束一個列表,其中每個元素包含數據框。這樣,當我做數據處理時,我可以在列表中放棄。

+0

可能是這個幫助http://stackoverflow.com/questions/3764292/loading-many-files-at-once'lapply(files,load,.GlobalEnv)' – akrun 2015-04-01 18:59:02

+0

是的,我雖然這樣。但是這會在全球環境下創造出一堆文件,不是嗎? – Repmat 2015-04-01 19:03:36

+0

對不起,當我評論,我只讀了第一部分 – akrun 2015-04-01 19:04:56

回答

7

您可以嘗試

lapply(files, function(x) mget(load(x))) 

mget將在列表中返回的對象(或對象)的值。在您的.Rdata文件中,每個文件只有一個「data.frame」對象。所以,即使get應該工作。

在你的代碼,

load(files[1]) 

的對象將在全球環境中找到。假設,對象是'd1',通過在控制檯上鍵入'd1',您可以獲得對象的值。同樣的方法

lapply(files, load, .GlobalEnv) 

加載在全球環境中的對象,並可以通過鍵入訪問。你的問題,我猜是爲了獲得列表中的值,可以用getmget完成。

5

現在經過測試,確實有效!

e1 = new.env() 
invisible(lapply(files, load, envir = e1)) 
my_list = as.list(e1) 
+0

對不起,但這不起作用。 – Repmat 2015-04-01 20:10:27

+0

@ user3551644哎呀,當然它不起作用,因爲'lapply'不會返回環境,所以它不能被嵌套。現在修復。 – Gregor 2015-04-01 21:38:08