Я хочу иметь возможность создать объект в 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, где функция в одном слоте может запускать функцию в другом слоте, не используяназвание объекта?