Я создал функцию для сохранения данных в определенном месте, которое загружается как часть пакета при запуске rstudio:
save_data <- function(fileName, file_name){
file_path <- paste0("~/", file_name)
save(list=deparse(substitute(fileName)), file=file_path)
}
но при вызове этой функции из другой функции возвращается «Ошибка сохранения следующего файла: ...».
Для воспроизведения проблемы я создал функцию savetest:
savetest <- function(fileName){
data1 <- fileName * 10
save_data(data1, file_name = "test.RData")
data1
}
и небольшой текст для сохранения:
source("savetestfunction.R")
x <- c(1:10)
data1 <- savetest(x)
Я потратил много времени, предполагая, что проблема связана с окружением и тем, что было видно из каждого (например, функция save_data, загруженная при запуске, не видела временную среду, созданную при вызове функции savetest), но в качестве теста я попыталась добавить print(fileName)
к функции save_data и, к моему удивлению, она фактически могла видеть, что было fileName на данный момент.
Исправление: я обновил функцию, чтобы она присвоила fileName в среде, созданной функцией save_data, и теперь она функционирует как задумано ...
save_data <- function(fileName, file_name){
file_path <- paste0("//placeholder//", file_name)
assign(deparse(substitute(fileName)), fileName)
save(list=deparse(substitute(fileName)), file=file_path)
}
Путаница: Это привело меня к мысли, что fileName, возможно, был обещанием при сохранении, однако save () содержит аргумент eval.promises, который по умолчанию равен True, поэтому этого не может быть!
Вопрос: Что стало причиной этой проблемы? (Беспорядок, связанный с окружающей средой? Обещания?) Что можно было сделать, чтобы избежать этого?
Edit: пытался использовать saveRDS, но с этим не справился. Больше интересует, почему сохранение не работает в первую очередь, а не фактическое исправление, так как назначение в функции save_data уже позволяет ему функционировать.