Я сам задал этот вопрос в R-списке и нашел обходной путь для имитации передачи по ссылке, что-то в стиле:
eval(
eval(
substitute(
expression(object@slot <<- value)
,env=parent.frame(1) )
)
)
Вдали от самого чистого кода вокруг, я бы сказал ...
Предложение, поступающее из списка R-help, использует среду для рассмотрения этих случаев.
РЕДАКТИРОВАТЬ: введен измененный код.
setClass("MyClass", representation(.cache='environment',masterlist="list"))
setMethod("initialize", "MyClass",
function(.Object, .cache=new.env()) {
.Object@masterlist <- list()
callNextMethod(.Object, .cache=.cache)
})
sv <- function(object,name,value) {} #store value
setMethod("sv",signature=c("MyClass","character","vector"),
function(object, name, value) {
object@.cache$masterlist[[name]] <- value
})
rv <- function(object,name) {} #retrieve value
setMethod("rv",signature=c("MyClass","character"),
function(object, name) {
return(object@.cache$masterlist[[name]])
})