Как загрузить данные из другого пакета из моего пакета

Одна из функций в пакете, который я разрабатываю, использует набор данных из acs:: пакет (fips.state объект). Я могу загрузить эти данные в мою рабочую среду через

data(fips.state, package = "acs"),

но я не знаю, как правильно загрузить эти данные для моей функции. я пытался

 @importFrom acs fips.state,

но наборы данных не экспортируются. Я не хочу копировать данные и сохранять их в своем пакете, потому что это кажется плохой практикой разработки.

Я посмотрел в http://r-pkgs.had.co.nz/namespace.html, http://kbroman.org/pkg_primer/pages/docs.html и https://cran.r-project.org/doc/manuals/r-release/R-exts.html, но они не содержат никакой информации о совместном использовании наборов данных из одного пакета в другой.

Как сделать набор данных, который требуется функциям из другого пакета, доступным для функций в моем пакете?

1 ответ

Если у вас нет контроля над acsпакет, тоacs::fips.state кажется вашим лучшим выбором, как предлагает @paleolimbot.

Если вы собираетесь часто звонить в fips.state, то я бы предложил сделать локальную копию через fips.state <- acs::fips.state, так как поиск объектов в других пакетах требует небольших затрат, которых можно избежать многократно.

Но если вы можете повлиять наacsпакет (даже если это не так, я думаю, что это полезное обобщение), то mikefc предлагает альтернативное решение, которое заключается в установкеfips.state объект как внутренний для пакета, а затем экспортировать его:

usethis::use_data(fips.state, other.data, internal = FALSE)

А затем в NAMESPACE:

export(fips.state)

или при использовании roxygen2:

#' Fips state
#' @name fips.state
#' @export
"fips.state"

Затем в своем собственном пакете вы можете просто @importFrom acs fips.state.

Вы всегда можете использовать package::object_name (например, dplyr::starwars) в любом месте кода вашего пакета, без использования оператора импорта.


is_starwars_character <- function(character) {
  character %in% dplyr::starwars$name
}
is_starwars_character("Luke Skywalker")
#> [1] TRUE
is_starwars_character("Indiana Jones")
#> [1] FALSE
Другие вопросы по тегам