Сохранение параметров пакета между сеансами
есть ли окончательный способ сохранить параметры или информацию, относящуюся к определенному пакету между сеансами?
например, скажем, кто-то сделал игру и выпустил ее как пакет R. Если бы они хотели сохранить высокие баллы и не сбрасывать их каждый раз, когда R начал новую сессию, что было бы лучшим способом сделать это? В настоящее время я могу думать только о хранении файла в домашнем каталоге пользователей, но я не уверен, что мне нравится этот подход.
2 ответов
это может быть подход. Я создал фиктивный пакет с фиктивной функцией (любая функция, которую я создаю, обязательно будет фиктивной функцией) и набором данных, который я назвал scores
что я установил следующим образом:
scores <- NA
затем я создал пакет с набором данных баллов.
затем я использовал следующее, чтобы изменить набор данных из R.
loc <- paste0(find.package("new"), "/Data")
unlink(paste0(loc, "/scores.rda"), recursive = TRUE, force = FALSE)
scores <- 10
save(scores, file=paste0(loc, "/scores.rda"))
затем, когда я выгрузил библиотеку и снова загрузил набор данных сейчас говорит:
> scores
[1] 10
может ли это быть изменено, чтобы сделать то, что вы хотите? Вы должны были бы сохранить его между каким-то образом, но я не уверен, как это сделать, не возясь с
Я думаю, что нет способа сохранить настройки без сохранения их на диск или базу данных, так или иначе. Это можно сделать тихо, хотя, поставив код ниже в вашем ~/.Rprofile
. Однако, если у вас есть пакеты, которые сохраняют настройки другими способами, чем использование options
вы должны добавить их вручную.
Я знаю, что это именно то, что вы сказали, что не хотите, но это может вызвать некоторые споры, по крайней мере.
.Last <- function(){
my.options <- options()
save(my.options, file="~/.Roptions.Rdata")
}
.First <- function(){
tryCatch({
load("~/.Roptions.Rdata")
do.call(options, my.options)
rm(my.options)
}, error=function(...){})
}
к моему удивлению try(..., silent=TRUE)
выдает предупреждение при запуске, если ~/.Roptions.Rdata
не существует, поэтому я использовал tryCatch
вместо.