2017-04-13 110 views
0

我正在努力尋找一種簡單的方法來修改具有多個插槽的S4對象。一個玩具的例子是:如何組合或修改S4對象?

setClass(
    Class = "First", 
    slots = c(foo = "numeric") 
) 
setClass(
    Class = "Second", 
    slots = c(bar = "numeric"), 
    contains = "First" 
) 
dog <- new(Class="First", 
      foo = 1) 
cat <- new(Class="Second", 
      foo = [email protected], 
      bar = 1) 
str(cat) 

這是微不足道的,因爲第一類只包含一個槽(foo)。是否有一種簡單的方法來組合/修改包含多個插槽的S4對象?

回答

-1

是的,大多數創建S4對象的人創建了多種方法來處理它們,這些方法將以您最喜歡的方式操作數據以滿足您的特定目的。

有時是通過創建一個全新的類特定的方法來完成特定的任務和其他它是通過創建一個do指示R鍵應用類特定的實現現有的通用功能(如rbindsummary )你可以在這裏讀到它:

Bioconductor S4 Tutorial

這應該讓你在正確的方向創建自己的功能或定製現有仿製藥與對象的工作負責。

0

看起來你正試圖用一個父類實例的值來實例化一個子類。我不認爲有一個簡單的方法來做到這一點,但它可以做到。在這裏,我們檢索父類實例槽值,並使用do.call來實例化子類對象:

par.slots <- sapply(slotNames(dog), slot, object=dog, simplify=F) 
do.call("new", c("Second", bar=1, par.slots)) 

## An object of class "Second" 
## Slot "bar": 
## [1] 1 
## 
## Slot "foo": 
## [1] 1