Zagnieżdżony wybór środowiska funkcji

Piszę kilka funkcji do wykonywania powtarzających się zadań, ale próbuję zminimalizować ilość razy ładowania danych. Zasadniczo mam jedną funkcję, która pobiera pewne informacje i tworzy wykres. Następnie mam drugą funkcję, która zapętli i wyśle ​​wiele wykresów do pliku .pdf. W obu funkcjach mam następujący wiersz kodu:

if(load.dat) load("myworkspace.RData")

gdzieload.dat jest logiczne, a dane, których potrzebuję, są przechowywane w myworkspace.RData. Kiedy dzwonię do funkcji opakowującej, która przeplata i wyprowadza wiele wykresów, nie chcę przeładowywać obszaru roboczego w każdym wywołaniu funkcji wewnętrznej. Pomyślałem, że mogę po prostu załadować obszar roboczy raz w funkcji opakowania, a wtedy funkcja wewnętrzna może uzyskać dostęp do tych danych, ale otrzymałem błąd informujący inaczej.

Zrozumiałem więc, że kiedy funkcja nie może znaleźć zmiennej w swoim lokalnym środowisku (utworzonej po wywołaniu funkcji), funkcja będzie szukać zmiennej w środowisku macierzystym.

Zakładałem, że środowisko nadrzędne do wywołania funkcji wewnętrznej będzie zewnętrznym wywołaniem funkcji. Oczywiście nie jest to prawdą:

func1 <- function(...){
  print(var1)
}

func2 <- function(...){
  var1 <- "hello"
  func1(...)
}

> func2()
Error in print(var1) : object 'var1' not found

Po przeczytaniu wielu pytań, podręcznik językowy ito naprawdę pomocny post na blogu, wymyśliłem następujące:

var1 <- "hello"
save(list="var1",file="test.RData")
rm(var1)

func3 <- function(...){
  attach("test.RData")
  func1(...)
  detach("file:test.RData")
}

> func3()
[1] "hello"

Czy jest lepszy sposób, aby to zrobić? Dlaczego niefunc1 poszukaj niezdefiniowanych zmiennych w środowisku lokalnym utworzonym przezfunc2, kiedy to byłofunc2 to się nazywafunc1?

Uwaga: nie wiedziałem, jak nazwać to pytanie. Jeśli ktoś ma lepsze sugestie, zmienię go i wyedytuję.

questionAnswers(2)

yourAnswerToTheQuestion