我正在尝试定义其中一个插槽是列表的类。 我班的定义如下:
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
后,我想将列表d3
中的d
设置为默认值,但我不知道该怎么做。如果有人能帮助我,我感激不尽。
感谢。
答案 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?