Пакет R: Обновить / обновить внутренние необработанные данные
Я разрабатываю пакет в R
(3.4.3), которая имеет некоторые внутренние данные, и я хотел бы иметь возможность позволить пользователям обновлять ее, не выполняя слишком много работы. Но позвольте мне быть более конкретным.
Пакет содержит несколько функций, которые зависят от нескольких параметров, но я на самом деле экспортирую только функции-оболочки, которые выполняют всю работу. Поскольку существует большое количество параметров для передачи этим функциям-оберткам, я помещаю их в .csv
файл и передавая их в виде списка. Поэтому данные простые .csv
файл называется param.csv
с именами параметров в одном столбце и их значениями в следующем столбце
parameter_name,parameter_value
ticker, SPX Index
field, PX_LAST
rolling_window,252
upper_threshold,1
lower_threshold,-1
signal_positive,1
signal_neutral,0
signal_negative,-1
Я обрабатываю это работает
param.df <- read.csv(file = "param.csv", header = TRUE, sep = ",")
param.list <- split(param.df[, 2], param.df[, 1])
и я положил список внутри пакета, как это
usethis::use_data(param.list, overwrite = TRUE)
Затем при сбросе R
интерактивное окно и выполнить
devtools::document()
devtools::load_all()
devtools::install()
require(pkg)
все работает отлично, данные доступны и могут быть переданы в функции.
Первая проблема: когда я меняюсь
param.csv
, сохраните его и повторите вышеуказанные четыре строки кода, внутреннийparam.list
не обновляется Есть что-то, чего я здесь не хватает? Или разработчик пакета по своей природе должен запуститьusethis::use_data(param.list, overwrite = TRUE)
каждый раз, когда он меняет.csv
файл, откуда поступают данные?
Поскольку она предназначена для своего рода карты, пользователи захотят настроить параметры для (ручной) калибровки модели. Чтобы попытаться решить эту проблему, я позволил пользователям предоставить функции со своим собственным списком параметров (как .csv
файл как раньше). У меня есть функция get_param_list("path/to/file.csv")
он выполняет ту же обработку, что и выше, и возвращает список. Это позволяет пользователям передавать свой собственный список параметров. Де-факто, внутренние данные param.list
считается настройкой параметров по умолчанию.
Вторая проблема: я хотел бы позволить пользователям изменять этот список параметров по умолчанию
param.list
снаружи упаковки безопасным способом.
Таким образом, поскольку внутренний объект является списком, пользователи могут просто изменить элемент по своему выбору в списке вне пакета. Но это довольно опасно для меня, потому что пользователи могут - забыть параметры, поэтому у меня есть значения по умолчанию внутри функций для этого случая - заменить параметр другим типом, который может вызвать ошибку или, что еще хуже, побочные эффекты.
Можно ли разрешить пользователям изменять внутренний список параметров, не открывая пакет? Например, я думал о функции, которая может заменить .csv
файл от нового, предоставленного пользователем, но это возвращает меня к первой проблеме, когда я перезапускаю приглашение R и переустанавливаю пакет, ничего не происходит, если я usethis::use_data(param.list, overwrite = TRUE)
изнутри пакета. Будет ли другой тип данных более полезным (например, сделать данные внутренними)?
Это мой первый вопрос на этом веб-сайте, но я понимаю, что он довольно длинный и может рассматриваться как вопрос стиля кодирования. Но если кто-то может увидеть явную ошибку или неправильное понимание разработки пакета в R
с моей стороны, это действительно помогло бы мне.
ура