R'de save()
'u geçersiz kılmaya çalışıyorum, böylece bir nesneyi kaydetmeden önce eksik dizinler oluşturur. Elips yöntemini kullanarak bir nesneyi bir işlevden diğerine geçirirken sorun yaşıyorum.İç içe geçmiş işlevlerde nesne nasıl geçilir?
Benim örnek:
save <- function(...,file){ #Overridden save()
target.dir <- dirname(file) #Extract the target directory
if(!file.exists(target.dir)) {
#Create the target directory if it doesn't exist.
dir.create(target.dir,showWarnings=T,recursive=T)
}
base::save(...,file=file.path(target.dir,basename(file)))
}
fun1 <- function(obj) {
obj1 <- obj + 1
save(obj1,file="~/test/obj.RData")
}
fun1(obj = 1)
bu hataya sonuçlarının üstünde kod:
Error in base::save(..., file = file.path(target.dir, basename(file))) : object ‘obj1’ not found
Sorun nesne 'obj1' tasarruf benim özel iç bulunmadığını olduğunu fark () işlevi, ancak henüz fun1'den base :: save'e nasıl geçeceğini henüz anlamadım.
denedim:
base::save(parent.frame()$...,file=file.path(target.dir,basename(file)))
ve:
base::save(list=list(...),file=file.path(target.dir,basename(file)))
başarılı.
Herhangi bir öneriniz var mı? Parametre çağrıyı kaydetmek :: tabanına eklendi
save <- function(...,file){ #Overridden save()
target.dir <- dirname(file) #Extract the target directory
if(!file.exists(target.dir)) {
#Create the target directory if it doesn't exist.
dir.create(target.dir,showWarnings=T,recursive=T)
}
base::save(...,file=file.path(target.dir,basename(file)),envir=parent.frame())
}
Not:
Düzeltilmiş base.name yukarıdaki kodu İşlevi için. Sağol Matthew. –