Próbuję uruchomić fragment kodu R w trybie piaskownicy, ładując wszystkie niezbędne zależności (funkcje i dane) do nowego środowiska i oceniając wyrażenie w tym obszarze środowisko. Jednak mam problemy z funkcjami wywołującymi inne funkcje w środowisku. Oto prosty przykład:R - Ocena zagnieżdżonej funkcji w środowisku
jobenv <- new.env(parent=globalenv())
assign("f1", function(x) x*2, envir=jobenv)
assign("f2", function(y) f1(y) + 1, envir=jobenv)
expr <- quote(f2(3))
Korzystanie eval
na expr
nie od f2
nie może znaleźć f1
> eval(expr, envir=jobenv)
Error in f2(3) : could not find function "f1"
natomiast wyraźnie mocowania środowisko działa
> attach(jobenv)
> eval(expr)
[1] 7
jestem prawdopodobnie brakuje czegoś oczywiste, ale nie mogłem znaleźć żadnej permutacji połączenia eval
, które działa. Czy istnieje sposób na uzyskanie tego samego efektu bez dołączania do środowiska?
Należy dokonać edycja nowe pytanie, ponieważ jest bardzo inny niż oryginalny. –
Dzięki za sugestię, zrobiłem, oto ona: [R - ocenia zagnieżdżone wywołanie funkcji w deserializowanym środowisku] (http://stackoverflow.com/questions/17733323/r-evaluate-nested-function-call-in- a-deserialized-environment) –