Как получить доступ к переменным из более высоких сред - PullRequest
0 голосов
/ 13 мая 2018
f <- function(x, y, z) {
    lapply(as.list(match.call()[-1]), eval)
}

f(x=2, z=3)

Выходная информация соответствует ожидаемой:

$x
[1] 2

$z
[1] 3

Однако, когда эта функция помещается в другую, происходит сбой.

g <- function(a) {
    f(x=a, z= 3)
}

g(2)

Сообщение об ошибке:

Error in FUN(X[[i]], ...) : object 'a' not found

Очевидно, что функция eval выглядит только в родительской среде, а не в более высоких средах. В режиме отладки все работает как положено:

> g <- function(a) {
+   browser()
+   f(x=a, z= 3)
+ }
> g(2)
Called from: g(2)
Browse[1]> a
[1] 2

1 Ответ

0 голосов
/ 13 мая 2018

Это взято из ?eval примеров:

f <- function(x, y, z) {
  e1 <- parent.frame()
  lapply(as.list(match.call()[-1]), eval, envir = e1)
}

f(x=2, z=3)

g <- function(a) {
  f(x=a, z= 3)
}

g(5)

Кажется, вам нужно специально определить родительскую среду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...