Próbuję przesłonić save()
w R, aby utworzyć wszelkie brakujące katalogi przed zapisaniem obiektu. Mam problem z przekazaniem obiektu przez jedną funkcję do drugiej przy użyciu metody wielokropka.Jak przekazywać obiekty w zagnieżdżonych funkcjach?
Mój przykład:
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)
Powyższy kod powoduje ten błąd:
Error in base::save(..., file = file.path(target.dir, basename(file))) : object ‘obj1’ not found
zdaję sobie sprawę, że problemem jest to, że obiekt „obj1” nie istnieje w moim zwyczaju oszczędzania (), ale nie mam jeszcze pojęcia, jak przekazać go z fun1 do base :: save.
Próbowałem:
base::save(parent.frame()$...,file=file.path(target.dir,basename(file)))
oraz:
base::save(list=list(...),file=file.path(target.dir,basename(file)))
bez powodzenia.
Wszelkie sugestie?
Poprawione base.name do basename w kodzie powyżej. Dzięki Matthew. –