我正在用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”)。