2013-05-29 77 views
0

我想在R中的二維數據結構中存儲一個對象。我已經搜索並嘗試了幾種解決方案,但是他們都沒有做我想要的。這是我腦子裏想的:對象的二維數據結構

S = SomeTwoDimensionalStructure(dim=c(2,4)) 

S[1,1] = LoadDataObject("File1") 
s[1,2] = LoadDataObject("File2") 
# etc 

FunctionWantingObject(S[1,1]) 

This的解決方案是相當接近,但需要訪問S[[1,1]],而不是S[1,1]

將對象添加到列表中,然後使用dim導致後面的函數不滿意傳遞的參數。

+0

解決方案取決於LoadDataObject(「File1」)對象的結構嗎?你可以請,編輯你的問題加入這個'str(LoadDataObject(「File1」))' – agstudy

回答

3

如果您願意爲您的二維結構創建一個新類,那麼您可以定義一個特殊的[方法來實現您想要的功能。

## Make sample data, a matrix of lists, of class "listmatrix" 
set.seed(44) 
m <- matrix(lapply(sample(9), function(X) sample(letters, size=X)), ncol=3) 
class(m) <- "listmatrix" 

## Define a new `[` method for "listmatrix" objects 
`[.listmatrix` <- function(x,i,j,...) `[[`(x,i,j,...) 

## Check that it works 
m[1,2] 
# [1] "m" "f" "h" "y" "r" "x" "q" "k" "n" 
+0

這實際上類似於需要'S [[1,1]]''額外的結構?不得不使用S [[1,1]]而不是'S [1,1]'有什麼「錯誤」? – SabreWolfy

+1

對我來說看起來不一樣。你只能在方法的定義中鍵入'[[''一次。之後,爲了檢索任何矩陣元素的內容(而不是長度單列表包裝內容),可以使用例如'S [1,1]',這聽起來就像你所要求的。 –

+0

好的,是的。我的意思是它的原理是一樣的,'[''方法替代鍵入'[[''。 – SabreWolfy