Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何为自定义S3类实现提取/子集([,[<;-,[[,[[<;-)函数?_R_Oop - Fatal编程技术网

R 如何为自定义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

我有一个自定义的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您应该为向量类实现自定义访问器函数以实现此行为:

在实现向量类时,应该实现以下方法: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())
}