【问题标题】:How to override indexing functions [ and [[ in R?如何在R中覆盖索引函数[和[[?
【发布时间】:2014-10-25 14:03:33
【问题描述】:

这是我的尝试:

x = list()
x$data = rnorm(26)
x$name = letters
class(x) <- "myclass"
"[" <- function(i, ...) UseMethod("[")
"[.myclass" <- function(...) {
    res = x$data[...]
    names(res) = x$names[...]
}
x[1:3]

它没有用:

> x = list()
> x$data = rnorm(26)
> x$name = letters
> class(x) <- "myclass"
> "[" <- function(i, ...) UseMethod("[")
> "[.myclass" <- function(...) {
+     res = x$data[...]
+     names(res) = x$names[...]
+ }
> x[1:3]
Error in UseMethod("[") :
  no applicable method for '[' applied to an object of class "c('double', 'numeric')"

似乎“myclass”被忽略了。

【问题讨论】:

  • 通常 [ 生成与其参数相同类的对象,因此我将定义 [ 以生成另一个 myclass 对象,而不是不同类的对象。如果需要,您可以定义各种 as.* 方法将 myclass 对象转换为不同的类。

标签: r indexing


【解决方案1】:

您没有将x 传递给函数。此外,您不需要将 [ 设为 S3 通用;它已经是通用的。最后,需要在函数结束时返回数据。

"[.myclass" <- function(x, ...) {
    res = x$data[...]
    names(res) = x$name[...]
    res
}

x[1:3]
#           a            b            c 
#0.3115254677 0.3143685905 0.3592891382 

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 2015-12-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多