我有以下代码
obj <- list(list(a=4,f=5,g=5),list(a=44,f=54,g=54))
class(obj) <- "mysubclass"
class(obj[1])
class(obj[2])
class(obj[1:2])
class(obj)
导致:
> class(obj[1])
[1] "list"
> class(obj[2])
[1] "list"
> class(obj[1:2])
[1] "list"
> class(obj)
[1] "mysubclass"
什么是不通过子集化而丢失班级的正确解决方案?例如,class(obj[1:2])
结果是mysubclass
并且仍然表现为列表。
问题是通用的[
方法是剥离class
属性。为了避免这种情况,您可以定义自己的泛型mysubclass
, i.e.
## Answer suggested by Petr Matousu
## Based on simple.list method
'[.mysubclass' = function(x, i, ...) {
structure(NextMethod("["), class = class(x))
}
Or
'[.mysubclass' = function(x, i, j, ..., drop=TRUE) {
## Store the class attribute
cl = class(x)
## Pass your object to the next method
y = NextMethod('[')
## Update the class and return
class(y) = cl
y
}
您的示例现在可以按预期工作。您还应该看看:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)