我正在尝试定义其中一个插槽是列表的类.
我班的定义如下:
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?