Tôi đang cố gắng ghi đè save()
trong R để nó tạo ra bất kỳ thư mục bị thiếu nào trước khi lưu một đối tượng. Tôi đang gặp rắc rối khi truyền một đối tượng thông qua một hàm sang một hàm khác bằng phương pháp dấu ba chấm.Làm thế nào để vượt qua đối tượng trong các hàm lồng nhau?
dụ của tôi:
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)
Đoạn mã trên kết quả do lỗi này:
Error in base::save(..., file = file.path(target.dir, basename(file))) : object ‘obj1’ not found
Tôi nhận ra rằng vấn đề là đối tượng 'obj1' không tồn tại bên trong tùy chỉnh của tôi tiết kiệm (), nhưng tôi chưa tìm ra cách chuyển nó từ fun1 sang base :: save.
Tôi đã thử:
base::save(parent.frame()$...,file=file.path(target.dir,basename(file)))
và:
base::save(list=list(...),file=file.path(target.dir,basename(file)))
không thành công.
Mọi đề xuất?
base.name Corrected để basename trong đoạn code trên. Cảm ơn Matthew. –