Это безумие и просто из-за интеллектуального любопытства: могу ли я запустить функцию в R таким образом, чтобы после завершения функции я мог получить все переменные, созданные при выполнении функции? Таким образом, способность заглядывать в функцию прямо перед возвратом? Я не имею в виду ввод функции в режиме отладки.
R - получить все переменные, созданные из вызова функции
Ответ 1
Я не уверен, что это то, что вы хотите, но, возможно, близко.
Вы можете встроить в существующие функции арбитражное выражение 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))
Ответ 2
Чтобы получить все переменные и их значения в виде списка, вы можете использовать последнюю строку функции в этом примере:
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
Ответ 3
Это то, что вы ищете?
> fjj <- function() { x <- 3; y <- 4; ls(environment())}
> fjj()
[1] "x" "y"
Или, возможно, вам нужен список, в котором вы получаете каждый компонент.