我有一个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,使用引用类的答案也欢迎。
这是不可能的目前与R6类。
有关于这个话题的讨论:https://github.com/r-lib/R6/issues/153