Пакет 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 с моей стороны, это действительно помогло бы мне.

ура

0 ответов

Другие вопросы по тегам