Tekrarlanan görevler yapmak için bazı işlevler yazıyorum, ancak veriyi yüklediğim süreyi en aza indirmeye çalışıyorum. Temel olarak bazı bilgileri alan ve bir çizim yapan bir fonksiyonum var. Daha sonra, bir çok pini bir .pdf'ye gönderecek ve çıkacak ikinci bir işlevim var. her iki işlev I kod aşağıdaki satırı vardır: load.dat
mantıklı ve ihtiyacım veri myworkspace.RData saklanır olanİç içe geçmiş işlev ortamı seçimi
if(load.dat) load("myworkspace.RData")
. Dönen ve birden fazla parsel çıkaran sarıcı işlevini çağırdığımda, iç işleve yapılan her çağrıda çalışma alanını yeniden yüklemek istemiyorum. Çalışma alanını bir kez sarmalayıcı işlevine yükleyebildiğimi sandım, sonra içsel işlev bu verilere erişebiliyordu, fakat aksi halde bir hata oluştu.
Bu nedenle, bir işlev değişkeni yerel ortamdaki değişkende bulamadığında (işlev çağrıldığında oluşturulduğunda), işlev değişkenin ana ortamına bakacaktır.
Ana ortamın iç işlev çağrısının dış işlev çağrısı olacağını varsaydım. Açıkçası bu doğru değildir:
func1 <- function(...){
print(var1)
}
func2 <- function(...){
var1 <- "hello"
func1(...)
}
> func2()
Error in print(var1) : object 'var1' not found
çok sayıda soru, dil kılavuzu ve this gerçekten yararlı blog yazısı okuduktan sonra geldi şu:
var1 <- "hello"
save(list="var1",file="test.RData")
rm(var1)
func3 <- function(...){
attach("test.RData")
func1(...)
detach("file:test.RData")
}
> func3()
[1] "hello"
yapmak için daha iyi bir yolu var mı bu? Neden func1
, func2
tarafından oluşturulan yerel ortamda tanımlanmamış değişkenleri aramıyor, func1
adı verilen func2
iken?
Not: Bu soruyu nasıl adlandıracağımı bilmiyordum. Daha iyi öneriler varsa, bunu değiştirip bu satırı düzenlerim.
Sözcük Kapsama alma bir bağlantı ekleyerek fonksiyonu mutlaka çağıran ortam değil üst ortamında, tanımsız sembollerin arayacaktır anlamına gelir. Bunu da kontrol edin: https://github.com/hadley/devtools/wiki/Environments –
@ Ferdinand.kraft Bağlantı için teşekkürler. Bu öğleden sonra çalışacağım. – dayne
Verileriniz veri çerçeve biçimindeyse, 'data.table' paketini kullanabilir ve tablolarınızı func1' func3' içinde bir argüman olarak iletebilirsiniz. Bu paket referans olarak çalışır ve verilerinizin istenmeyen kopyalarını oluşturmaz. –