R 如何组合或修改S4对象?

R 如何组合或修改S4对象?,r,s4,R,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(C

我正在努力找到一种简单的方法来修改具有多个插槽的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 = dog@foo,
           bar = 1)
str(cat)
setClass(
Class=“第一”,
插槽=c(foo=“数值”)
)
setClass(
Class=“秒”,
插槽=c(bar=“数值”),
contains=“First”
)

dog是的,大多数创建S4对象的人都会创建各种方法,以您最倾向于为特定目的操作数据的方式来处理这些对象

有时,这是通过创建一个全新的特定于类的方法来完成特定的任务,而另一些则是通过创建一个
do
来指示R应用现有泛型函数的特定于类的实现(例如
rbind
summary
),您可以在这里阅读:


这将使您朝着正确的方向前进,创建自己的函数或自定义现有泛型以处理对象。

看起来您正在尝试使用父类实例的值实例化子类。我不认为有一个简单的方法可以做到这一点,但它是可以做到的。在这里,我们检索父类实例槽值,并使用
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
par.slots