R: расчленение списка / обращение к текущей среде - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь написать функцию, которая может быть использована в среде выполнения функции, которая является обратной операцией к списку, то есть, учитывая именованный список, она возвращает именованные элементы как именованные объекты. Вот что у меня есть:

library(tidyverse)

unfold <- function(X){list2env(X, envir = rlang::current_env())}

l. <- list(A = 1, B = 2)

tst_unlist <- function(X){
  unfold(X)
  out <- as.list(rlang::current_env())
  out
}

tst_unlist(X = l.)

Возвращает:

$X
$X$A
[1] 1

$X$B
[1] 2

Другими словами, все, что есть в окружении, это X, содержащий список l..

Желаемый вывод:

$X
$X$A
[1] 1

$X$B
[1] 2


$A
[1] 1

$B
[1] 2

Другими словами, я хочу, чтобы функция раскрытия присваивала назначенные элементы списка l. в текущей (исполнительной) среде tst_unlist.

1 Ответ

1 голос
/ 29 апреля 2019

Вам не нужна текущая среда, ваша функция unfold должна использовать вызывающую среду для создания переменных в области действия tst_unlist. Так что просто сделай

unfold <- function(X){list2env(X, envir = rlang::caller_env())}

Использование current_env() просто поместит эти объекты в среду выполнения функции unfold.

...