R 如何为自定义S3类实现提取/子集([,[<;-,[[,[[<;-)函数?
我有一个自定义的S3类R 如何为自定义S3类实现提取/子集([,[<;-,[[,[[<;-)函数?,r,oop,R,Oop,我有一个自定义的S3类foo,它在普通的数据框架上添加了一些自定义行为 foo_object <- data.frame() class(foo_object) <- c("foo", "data.frame") 如果您通过foo\u list\u object[c(1,2,3)]对列表上的多个元素应用子集设置操作,则只会得到类list的对象。但我希望它保持为foo\u list Hadley您应该为向量类实现自定义访问器函数以实现此行为: 在实现向量类时,应该实现以下方法:len
foo
,它在普通的数据框架上添加了一些自定义行为
foo_object <- data.frame()
class(foo_object) <- c("foo", "data.frame")
如果您通过foo\u list\u object[c(1,2,3)]
对列表上的多个元素应用子集设置操作,则只会得到类list
的对象。但我希望它保持为foo\u list
Hadley您应该为向量类实现自定义访问器函数以实现此行为:
在实现向量类时,应该实现以下方法:length、[,[
为S3类实现自定义访问器函数的最佳方法是什么?我可以依赖底层的基元类吗
是的,您可以。请在您的内致电NextMethod
[谢谢您快速、易懂的回答!
foo_list_object <- list()
class(foo_list_object) <- c("foo_list", "list")
`[.foo_list` <- function(x, i) {
class(x) <- "list"
as.foo_list(x[i])
}
`[[<-.foo_list` <- function(x, i, y) {
if (!is.foo(y)) {
stop("Please provide an object of class foo.")
}
x[[i]] <- y
}
`[[<-.foo_list` <- function(x, i, value) {
stopifnot(is.foo(value))
NextMethod()
}
`[.foo_list` <- function(x, i) {
as.foo_list(NextMethod())
}