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