#r #environment-variables #environment #rlang
#r #переменные среды #Окружающая среда #rlang
Вопрос:
Я работаю над проектом, который имеет два возможных сценария. Я первый scenanrio, мне нужна переменная a
, b
, и c
в среде. Во втором сценарии мне нужны переменные a
, b
, d
, и f
.
Я пытаюсь найти способ каким-то образом «прикрепить» эту среду, чтобы сначала создать переменную basis_environment
с переменной, которые являются общими в обоих сценариях, a
и b
basis_environment <- env(a = 4, b = 5)
и в зависимости от сценария (например, scenario1) я создаю еще только такие переменные, как:
final_environment <- env(basis_environment,
c = 7)
Однако это приводит к final_ennvironment, который имеет только один элемент, а именно c
.
Как я могу создать среду, в которой есть все три переменные, так что две создаются на более ранней стадии, а последняя создается позже, но конечная среда включает в себя все три из них?
Комментарии:
1. Ваш второй звонок должен быть
rlang::child_env
кому , а неrlang::env
кому .
Ответ №1:
Вы могли бы достичь этого в базовом R с помощью чего-то вроде:
basis_environment <- list2env(list(a = 4, b = 5))
# The following ensures a copy of the environment is made, not just a reference
final_environment <- list2env(as.list(basis_environment))
# Add elements directly to final_environment using the $ operator
final_environment$c <- 7
И мы видим, что эти две среды различны:
ls(envir = basis_environment)
#> [1] "a" "b"
ls(envir = final_environment)
#> [1] "a" "b" "c"
Создано 2020-11-22 пакетом reprex (версия 0.3.0)