«прикрепление» переменных среды к существующей среде

#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)