R - получить все переменные, созданные из вызова функции - PullRequest
12 голосов
/ 02 сентября 2011

Это безумие и просто из интеллектуального любопытства: могу ли я запустить функцию в R таким образом, чтобы после ее завершения я мог получить все переменные, созданные при ее выполнении? Итак, возможность заглянуть в функцию прямо перед ее возвратом? Я не имею в виду ввод функции в режиме отладки.

Ответы [ 3 ]

18 голосов
/ 02 сентября 2011

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

> trace(lm, exit = function().last_env <<- parent.frame())
Tracing function "lm" in package "stats"
[1] "lm"
> lm(y~x, data.frame(x=1:10, y=10:1))
Tracing lm(y ~ x, data.frame(x = 1:10, y = 10:1)) on exit 

Call:
lm(formula = y ~ x, data = data.frame(x = 1:10, y = 10:1))

Coefficients:
(Intercept)            x  
         11           -1  

> ls(.last_env)
 [1] "cl"          "contrasts"   "data"        "formula"     "m"           "method"      "mf"          "model"       "mt"          "na.action"   "offset"     
[12] "qr"          "ret.x"       "ret.y"       "singular.ok" "subset"      "w"           "weights"     "x"           "y"           "z"          
> get("cl", .last_env)
lm(formula = y ~ x, data = data.frame(x = 1:10, y = 10:1))
1 голос
/ 07 октября 2016

Чтобы получить все переменные и их значения в виде списка, вы можете использовать последнюю строку функции в этом примере:

myFunction=function(){
  a="lolcat"
  b=data.frame(firstCol=1:3,secondCol=letters[1:3])
  d=list()
  d[["someName"]]=10:13
  sapply(ls(),function(x)get(x),simplify=F,USE.NAMES=T)
}

myResults=myFunction()

myResults

Выход:

$a
[1] "lolcat"

$b
  firstCol secondCol
1        1         a
2        2         b
3        3         c

$d
$d$someName
[1] 10 11 12 13
0 голосов
/ 02 сентября 2011

Это то, что вы ищете?

> fjj <- function() { x <- 3; y <- 4; ls(environment())}
> fjj()
[1] "x" "y"

Или, возможно, вам нужен список, в котором вы "получаете" каждый компонент.

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