2014-01-28 88 views
2

我有三個數據集保存在R格式A.RData,B.RData,C.RData(每個大小〜2Gb)。每個文件包含三個變量X,Y,Z.如何導入具有相同名稱的R數據集

我無法加載A.RData和B.RData,而無需先重命名變量。由於數據集很大,這些步驟如下:

load("A.RData") 
A = list(X=X,Y=Y,Z=Z) 
rm(X,Y,Z) 

load("B.RData") 
B = list(X=X,Y=Y,Z=Z) 
rm(X,Y,Z) 

需要一些時間。

有沒有辦法直接從列表A中導入A.RData中的數據,而不必複製變量的副本?

回答

1

是的,有。

A <- new.env() 
load('A.RData', envir=A) 
A <- as.list(A) 
+0

首先感謝您的答案。我有一個疑問,當運行as.list函數變量被複制或引用? – lucacerone

+0

他們被複制。如果這是有問題的,你可以考慮使用環境而不是列表。環境基本上是無序的列表。您可以使用'$'訪問元素,甚至可以在應用環境中使用'eapply'。 –

+0

感謝馬修,我現在正在閱讀R文檔來了解什麼是環境。這是通過引用傳遞事物而不是複製的一般方法嗎?正如你可以想象的那樣,當處理大型數據集時,它可以幫助我們在同一個對象上工作,而不必在時間上覆制它! – lucacerone

0

Matthew Plourde提供的解決方案是要走的路。將來,如果使用saveRDS(而不是save)保存數據,則可以避免這些問題。

函數saveRDS保存單個對象。例如:

X <- 1 
Y <- 2 
Z <- 3 

# put the objects in a list 
mylist <- list(X, Y, Z) 

# save the list 
saveRDS(mylist, file = "myfile.rds") 
rm(X, Y, Z, mylist) # remove objects (not necessary) 

# load the list 
newlist <- readRDS("myfile.rds") 
# [[1]] 
# [1] 1 
# 
# [[2]] 
# [1] 2 
# 
# [[3]] 
# [1] 3 

相反save,對象的名稱是存儲。因此,您可以將readRDS的結果指定爲其他名稱。請注意,您必須將所有變量放入列表中的一個列表中。

+0

mmm中查找參考類..這聽起來很有趣......出於好奇,會節省RDS並且readRDS允許我只導入一個或兩個變量而不是全部三個變量? – lucacerone

+0

@eroeurbano不,因爲'saveRDS'只允許保存一個對象。當然,你仍然可以創建多個文件,每個文件都包含一個對象。 –

+0

我想我將不得不切換到像matlab風格hdf5或類似的其他格式。感謝您的回答,這很有幫助! – lucacerone

相關問題