我正在用 R 编写一个 S3 类,它只是一个带有一些属性的整数。如果 x1 和 x2 是此类的对象(称为“myclass”),那么我希望 c(x1, x2) 返回 myclass 对象的向量,其中原始类定义和属性完好无损。但是,记录在案的 c() 行为是删除属性,因此我似乎需要编写自己的 c.myclass() 方法。我的问题是,我该怎么做?
问题的一个例子:
myclass <- function(x, n) structure(x, class="myclass", n=n)
x1 <- myclass(1, 5)
x2 <- myclass(2, 6)
c(x1, x2)
[1] 1 2
这里的结果只是一个数字类项的向量,原来的 n 属性已经消失了。
查看各种包的代码,我有时会看到如下代码,其中我们需要保留类属性,但仅此而已:
c.myclass <- function(..., recursive = F) {
structure(c(unlist(lapply(list(...), unclass))), class="myclass")
}
不幸的是,我也无法让它发挥作用。调用 c.myclass(x1, x2) 的结果是一个向量,其中向量本身具有类“myclass”,但向量中的每个项目都具有类数字;我真的希望向量中的每个项目都有“myclass”类。在实践中,我还需要升级此方法以保留其他属性(如 myclass 中的属性“n”)。