Минимальный пример
Присоединение пакета R6
require(R6)
Определение класса элемента
element_factory <- R6Class(
"Element",
private = list(
..value = 0),
active = list(
value = function(new) {
if(missing(new))
private$..value
else private$..value <- new}))
Определение класса контейнера
container_factory <- R6Class(
"Container",
private = list(
..element = element_factory$new()
),
active = list(
element = function() private$..element))
Создание контейнера istance
co <- container_factory$new()
Доступ к элементу и полю элемента
> co$element
<Element>
Public:
clone: function (deep = FALSE)
initialize: function (value = 0)
value: active binding
Private:
..value: 0
> co$element$value
[1] 0
Изменение поля значения в объекте элемента
Выдает ошибку
> co$element$value <- 3
Error in (function () : unused argument (base::quote(<environment>))
Но значение изменяется
> co$element
<Element>
Public:
clone: function (deep = FALSE)
initialize: function (value = 0)
value: active binding
Private:
..value: 3
Вопрос
Что означает эта ошибка и как ее предотвратить?
РЕДАКТИРОВАТЬ:
Я нашел обходной путь, но все еще не понимаю исходную ошибку:
elt <- co$element
elt$value <- 3
Это работает и не выдает ошибку.
Я также удивлен, что следующий код выдает еще одну ошибку:
(co$element)$value <- 3
Error in (co$element)$value <- 3 : could not find function "(<-"