2017-04-13 109 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