R S4 Функция доступа к слоту функции объекта класса в другом слоте - PullRequest
0 голосов
/ 07 июня 2018

Я хочу иметь возможность создать объект в R с двумя «слоями» функций.Ниже я собрал очень простой пример с использованием класса S4.

setClass("2layer_obj",
         slots = list(
           lower_functions = "list",
           higher_functions = "list"
         )
)

lower_functions <- list(
  function1 = function(x){
    x+2
  },
  function2 = function(y){
    y+6
  }
)

higher_functions <- list(
  function3 = function(z){
    test_obj@lower_functions$function1(z)+test_obj@lower_functions$function2(z)
  },
  function4 = function(z){
    test_obj@lower_functions$function1(z)-test_obj@lower_functions$function2(z)
  }
)

test_obj <- new("2layer_obj",
                lower_functions = lower_functions,
                higher_functions = higher_functions
                )

rm(lower_functions)
rm(higher_functions)

test_obj@higher_functions$function3(7)

Моя проблема в том, что для того, чтобы этот код работал, я должен поставить test_obj@ перед lower_functions$function1(z).Поэтому, если бы я перезапустил этот код, но изменил

 test_obj <- new("2layer_obj",
                lower_functions = lower_functions,
                higher_functions = higher_functions
                )

на

test_obj2 <- new("2layer_obj",
                lower_functions = lower_functions,
                higher_functions = higher_functions
                )

и попытался запустить test_obj2@higher_functions$function3(7)

Это не работаетпотому что

Error in test_obj2@higher_functions$function3(7) : 
object 'test_obj' not found

Итак, мой вопрос, как я могу создать объект (с любой из систем классов OO) в R, где функция в одном слоте может запускать функцию в другом слоте, не используяназвание объекта?

...