【问题标题】:Possible to define indexing methods for R6/reference classes?可以为 R6/参考类定义索引方法吗?
【发布时间】:2018-02-20 16:03:50
【问题描述】:

我有一个 R6 类,它基本上是一个类似矩阵的对象的包装器。我想为我的类定义一个方法,让我可以直接索引和子集矩阵的元素。

目前,我的代码如下所示:

cls <- R6Class("cls", public=list(
    initialize=function(...)
    {
        private$mat <- matrix(...)
        private$mat
    }),

    private=list(mat=NULL)
)

"[.cls" <- function(x, ...)
{
    x$.__enclos_env__$private$mat[...]
}

z <- cls$new(1:25, 5, 5)
z[1, 1]
# [1] 1

但是,这需要创建一个顶级 [ 方法,然后直接访问我的类的私有成员。如果可能的话,我想避免这种情况。

我尝试在我的类中添加一个方法,但它不起作用:

cls <- R6Class("cls", public=list(
    initialize=function(...)
    {
        private$mat <- matrix(...)
        private$mat
    },

    "["=function(x, ...)
    {
        "["(private$mat, ...) 
    }),

    private=list(mat=NULL)
)

z[1, 1]
# Error in z[1, 1] : object of type 'environment' is not subsettable

有没有办法在不违反封装的情况下做到这一点?

虽然这是针对 R6,但也欢迎使用参考类的答案。

【问题讨论】:

    标签: r reference-class r6


    【解决方案1】:

    目前这在 R6 类中是不可能的。

    关于这个话题的讨论在: https://github.com/r-lib/R6/issues/153

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-05
      • 2012-10-16
      • 2013-10-19
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 2016-07-11
      • 2014-03-17
      相关资源
      最近更新 更多