使用R中定义的类中的默认值

时间:2015-04-19 17:16:09

标签: r class

我正在尝试定义其中一个插槽是列表的类。 我班的定义如下:

setClass("myClass",
     slots=c(a="matrix", 
             b="matrix", 
             c="character", 
             d="list"))

d是一些参数的列表,如下所示:

d <- list(d1=c('as','sd'), d2=c(2,3,4), d3=5)

d中的元素数量是可变的,即在一个对象中它可能只有d1,在另一个对象中它包含d1d2

我想定义一个这样的对象:

myObject=new("myClass", 
       a = matrix(0, nrow=3, ncol=5), 
       b=matrix(1, nrow=2, ncol=3), 
       c='first', 
       d=list(d1=c('ak','fd','sd'), d2=c(2,3,4)))

定义myObject后,我想将列表d3中的d设置为默认值,但我不知道该怎么做。如果有人能帮助我,我感激不尽。

感谢。

1 个答案:

答案 0 :(得分:2)

可以为类提供原型

.myClass <- setClass("myClass",
     slots=c(a="matrix", 
             b="matrix", 
             c="character", 
             d="list"),
     prototype=prototype(
             d=list(d1=c('as','sd'), d2=c(2,3,4), d3=5)))

将原型用作由变量d更新的模板的代码可能是

d=list(d1=c('ak','fd','sd'), d2=c(2,3,4))
myd <- getClass("myClass")@prototype@d
myd[names(d)] <- d

可以使用

实例化新类
.myClass(d=myd)

通过定义initialize()方法或通过编写构造函数,可以以更加用户友好的方式公开此内容

myClass <- function(a, b, c, d, ...) {
    myd <- getClass("myClass")@prototype@d
    myd[names(d)] <- d
    .myClass(a=a, b=b, c=c, d=myd, ...)
}

将列表作为一种插槽类型,首先会破坏使用类的目的;也许最好有明确的插槽d1,d2,d3?