0

我正在尝试编写一个可以在函数的执行环境中使用的函数,该函数是列表的逆操作,即,给定一个命名列表,它将命名元素作为命名对象返回。这就是我所拥有的:

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,其中包含 list l.

期望的输出:

$X
$X$A
[1] 1

$X$B
[1] 2


$A
[1] 1

$B
[1] 2

换句话说,我希望展开函数将分配的列表元素分配l.到 tst_unlist 的当前(执行)环境中。

4

1 回答 1

1

您不想要当前环境,您的unfold函数应该使用调用环境以便在tst_unlist范围内创建变量。所以就这样做

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

使用current_env()只会将这些对象放在执行unfold函数的环境中。

于 2019-04-29T18:41:38.087 回答