Как загрузить данные из другого пакета из моего пакета
Одна из функций в пакете, который я разрабатываю, использует набор данных из 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