Ответ 1
Это может быть подход. Я создал фиктивный пакет с фиктивной функцией (любая функция, которую я создаю, является фиктивной функцией) и набор данных, который я назвал 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
Может ли это быть изменено, чтобы делать то, что вы хотите? Вам нужно будет сэкономить между ними, но я не уверен, как это сделать, не входя в функцию .Last
.
EDIT:
Похоже, эта опция небезопасна тем, что при компиляции в виде пакета и использовании ленивой загрузки он сохраняет наборы данных как:
RData.rbd, RData.rbx, а не как .rda файлы. Это означает, что подход, который я использую выше, не имеет ничего общего с тем, что мы хотим, чтобы он автоматически распознавался.
EDIT2
Этот подход работает, и я попробовал его на пакете, который я сделал. Вы не можете выполнять ленивую загрузку данных, и вам нужно либо явно использовать data(scores)
, либо использовать data(scores)
внутри функции, которую вы вызываете. Я также назначил scores
to .scores
int he global.env при первом создании и использовал exists
внутри функции, чтобы увидеть, существует ли она. Если `.scores. Я назначил это для оценки внутри функции. После того, как вы выгрузите библиотеку и снова лайдо, вам больше не придется беспокоиться об этом.
Возможно, альтернативой является сохранение этой функции как-то, которая может быть изменена с помощью совета Джоша здесь: Постоянная замена функции