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

我正在尝试定义其中一个插槽是列表的类.

我班的定义如下:

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而在另一个对象中它包含d1和d2.

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

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之后,我想将列表d中的d3设置为其默认值,但我不知道该怎么做.如果有人能帮助我,我感激不尽.

谢谢.

最佳答案 可以为类提供原型

.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?

点赞