2013-03-28 42 views
4

我有一個大的ExpressionSet對象(Bioconductor),名爲eset。你能解釋爲什麼會發生?爲什麼保存/加載後對象的副本與原始副本不相同?爲什麼在保存/加載/加載RData之後對象變得不同了?

> e2=eset 
> identical(e2,eset) 
[1] TRUE 
> save(e2,file="test.RData") 
> rm(e2) 
> e2 # just to check the removal 
Error: object 'e2' not found 
> load("test.RData") 
> identical(e2,eset) 
[1] FALSE 

是否有其他方法來檢查兩個對象的身份?

如果需要我在Windows 7有R 2.15.1工作

+0

只是猜測,也許這個數據類型存儲部分在磁盤上? –

+0

這是否發生在較小的物體上? –

+3

嘗試'all.equal'而不是相同的 - 這會告訴你這些對象是如何不同的。 – Ista

回答

7

環境有幾個[R對象類型(連接是另一個),用於其保存和加載並不精確逆之一。

e <- new.env() 
f <- e 
identical(e,f) 
# [1] TRUE 
save("f", file="f.Rdata") 
rm(f) 
load("f.Rdata") 
identical(e,f) 
# [1] FALSE 

ExpressionSet對象包含AssayData類,它被描述爲一個「定義爲listenvironment類聯合容器類」的一個assayData槽。雖然我沒有在我的電腦上安裝eset,但我猜esete2assayData插槽參考了不同的環境,導致identical(eset, e2)返回FALSE

+0

是的,你可能是對的。 (assayData(e2),assayData(eset))'返回FALSE,但是all.equal(assayData(e2),assayData(eset))'返回TRUE。 – yuk

+0

說句肯定的,你可以通過執行「深入」到對象(例如)'STR(E2)','STR(E2 @ assayData)',等等,直到你可以找到並分析環境,同時存放在那裏。祝你好運! –

+0

是的,assayData是指兩個對象的不同環境。看起來這是唯一的區別。我在開發3.0版本中看到相同的函數會有'ignore.environment'參數。謝謝你的幫助! – yuk

相關問題