可以为R6 /引用类定义索引方法吗?

时间:2018-02-20 16:03:50

标签: r reference-class r6

我有一个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的,但也欢迎使用引用类的答案。

1 个答案:

答案 0 :(得分:0)

R6类目前无法实现。

在以下位置有关于此主题的讨论: https://github.com/r-lib/R6/issues/153