2013-12-20 50 views
1

我們試圖在R中使用S4方法編程面向對象編程。在編程過程中,我們遇到了一些問題。顯然,S4方法的使用在互聯網上沒有很好的記錄,因此我們希望我們能夠在這裏得到我們一些問題的答案。關於在R中使用S4方法的問題

第一個問題:

我們試圖做一個矢量/陣列/列表..空S4對象。搜索互聯網給我們帶來以下問題在這個論壇:

Create a vector of empty S4 objects

由於(下同)在回答上面的問題的一個描述,我們用下面的代碼創建空S4對象的列表:

setClass("Name", representation(pos_x = "numeric", pos_y = "numeric", found = 
"logical"), prototype(found = FALSE)) 

newList <- lapply(rep("Name", 2), new) 

這工作得很好。但是,當我們試圖調用S4方法的一個槽(一個變量)時,這將不起作用。例如,當我們想要調用插槽「pos_x」時,以下代碼

newList[1]@pos_x 

不起作用。我們收到的錯誤信息是「嘗試從沒有插槽的基本類(」列表「)的對象中獲取插槽pos_x。 因此,看起來好像插槽未分配給S4方法,儘管它們被明確定義在列表中

有誰知道如何我們可以從的S4-方法/列表的對象一個叫插槽

第二個問題:?

我們想測試是否的一個上面列表中的元素等於「NULL」,因爲我們希望稍後創建對象。

要檢查這一點,我們嘗試:

newList[1] == NULL 

但這只是導致「邏輯(0)」。 有誰知道如何做到這一點?

建議,評論和問題是非常受歡迎的。

非常感謝!

回答

1

問題可能是由於使用[而不是[[

命令newList[1]返回長度爲1的列表,而命令newList[[1]]返回列表的一個元素。因此,您應該嘗試:

newList[[1]]@pos_x