[英]Created package not running functions from imported packages in NAMESPACE file
這是我的第一個 package。 這是 my.R 文件的運行方式,具有 3 個函數,其中兩個要導出。 它們的實際內容並不重要,只是它使用了很多tidyverse
函數。
#' @import tidyverse
#' @importFrom labelled set_variable_labels var_label
#' @importFrom readxl read_excel cell_cols
NULL
#' Carregando dados brutos
#'
#' @param diretorio_dados Diretório onde os microdados originais em formato de texto estão armazenados
#'
#' @param diretorio_dicionario Diretório onde o dicionário da pesquisa em formato xls está armaezenado
#'
#' @param ... vetores com datas das pesquisas de interesse no formato \code{c('trimestre', 'ano')}
#'
#' @return Lista de dataframes, sendo cada entrada um trimestre/ano em \code{...}
#' @encoding UTF-8
#' @export
#'
#' @examples
#' datazoom_pnadc('./Desktop', './Desktop', c(1, 2000), c(2, 2000))
#'
datazoom_pnadc <- function(diretorio_dados,
diretorio_dicionario,
...) {
return(NULL)
}
#' Painel básico
#'
#' @param build_data Default \code{TRUE}.
#' Se \code{TRUE}, implementa primeiro \code{\link{datazoom_pnadc}} e depois
#' monta paineis de indivíduos. Se \code{FALSE}, a função constrói paneis a partir de dados já carregados no R
#'
#' @param dados_prontos Bases de dados para diferentes trimestres da PNAD contínua.
#' Necessário se \code{build_data = FALSE}
#'
#' @param local_dados Diretório onde os microdados originais em formato de texto estão armazenados
#' caso \code{build_data = TRUE}
#'
#' @param local_dicionarios Diretório onde o dicionário da pesquisa em formato xls está armaezenado caso
#' \code{build_data = TRUE}
#'
#' @param periodos Lista de vetores com períodos de interesse no formato
#' \code{periodos = list(c(trimestre1, ano1), c(trimestre2, ano2), ...)}
#'
#' @encoding UTF-8
#'
#' @return Lista de dataframes, sendo cada entrada um trimestre/ano
#'
#' @examples
#' PNADC_2012 <- datazoom_pnadc(diretorio_dados = './Desktop',
#' diretorio_dicionario = './pnadcontinua/Desktop',
#' c(1,2012), c(2,2012))
#'
#' teste <- pnadc_painel_basico(build_data = FALSE,
#' dados_prontos = PNADC_2012)
#'
#' teste2 <- pnadc_painel_basico(build_data = TRUE,
#' local_dados = './pnadcontinua',
#' local_dicionario = './pnadcontinua/Dicionario_e_input',
#' periodos = list(c(1,2012), c(2,2012)))
#' @export
pnadc_painel_basico <- function(build_data = TRUE, ...){
return(NULL)
}
出於某種原因,即使在運行devtools::document()
並將其包含在我的 NAMESPACE 文件中之后:
# Generated by roxygen2: do not edit by hand
export(datazoom_pnadc)
export(pnadc_painel_basico)
import(tidyverse)
importFrom(labelled,set_variable_labels)
importFrom(labelled,var_label)
importFrom(readxl,cell_cols)
importFrom(readxl,read_excel)
如果我沒有事先設置library(tidyverse)
、 library(labelled)
和library(readxl)
,則 package 的功能在安裝和加載后不會運行。
除了其他必需的部分,我的說明文件有這個:
Imports:
labelled,
readxl,
tidyverse
有人可以幫忙嗎?
將tidyverse
從Imports
移到Depends
in DESCRIPTION
會使其工作,但如果您正在開發正式的 package,則不推薦使用這種方法。 就像@Bruno 評論的那樣:
> usethis::use_package("tidyverse")
Error: 'tidyverse' is a meta-package and it is rarely a good idea to
depend on it. Please determine the specific underlying package(s) that
offer the function(s) you need and depend on that instead. For data
analysis projects that use a package structure but do not implement a
formal R package, adding 'tidyverse' to Depends is a reasonable
compromise. Call `use_package("tidyverse", type = "depends")` to achieve
this.
將它放在Imports
中不起作用的原因是只有在那里列出的包導出的變量被放置在搜索路徑上,如編寫 R Extensions 的 Package 命名空間部分所述:
只有導出的變量被放置在附加的框架中。 加載從其他包導入變量的 package 也會導致這些其他包也被加載(除非它們已經被加載),但這些隱式加載不會將它們放在搜索路徑上。 因此 package 中的代碼只能依賴於其自己的命名空間中的對象,並且其導入(包括基本命名空間)是可見的
tidyverse
是一個元包,它不會導出其包含的包的功能,而是使用.onAttach
掛鈎來附加這些包(詳見tidyverse:::.onAttach
)。 這意味着如果使用上述方法導入tidyverse
,則該鈎子將不會運行,並且其他包導出的變量不會添加到搜索路徑中,這就是您無法訪問它們的原因。
將tidyverse
放在Depends
下確實會運行.onAttach
掛鈎,因此也會附加其他包。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.