R 如何组合或修改S4对象?
我正在努力找到一种简单的方法来修改具有多个插槽的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
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