I'm writing a small convenience package for accessing a private API, and am using httr
functions to conduct the requests. I'm also using Roxygen to handle documentation, etc. I'm importing httr
functions as such:
#' Get a page of data from the specified endpoint.
#' @keywords internal
#' @importFrom httr GET
#'
get_data <- function(url, headers, page_number) {
# Add querystring for page
url_with_page <- paste0(url, "?page=", page_number)
message("Downloading: ", url_with_page)
# Get API response
response <- GET(url_with_page, headers)
return(response)
}
However, when you try to run the package with no pre-loaded packages, I get namespace errors:
Error in get_data(url, headers, 1) :
could not find function "GET"
I typically defer to Hadley's expertise on this sort of thing, but is this a good case for using the Depends
field as well as/rather than Imports
?
Edit: my NAMESPACE generated by Roxygen.
# Generated by roxygen2 (4.1.1): do not edit by hand
export(get_export)
export(get_exports)
export(get_metadata)
importFrom(httr,GET)
importFrom(httr,add_headers)
importFrom(httr,content)
importFrom(jsonlite,fromJSON)
importFrom(jsonlite,rbind.pages)
Edit: my DESCRIPTION file.
Package: APIpack
Type: Package
Title: APIpack
Version: 0.1
Date: 2016-01-04
Authors: "Matt Policastro"
Description: This package provides a set of convenience functions.
License: Proprietary
LazyData: TRUE
Imports: httr,
jsonlite
Suggests: testthat
NAMESPACE
file haveimportFrom(httr, GET)
? – ZigmundDepends
instead ofImports
is if you think your end-user probably wants to use thehttr
functions directly whenever they load your package. – Trapezius@depends
and@importFrom x
belong in the package documentation moreso than the function definition. Also should be noted the importFrom will only work if you call the package directly, not if you call the package through a dependency. – Hendel@importFrom
directive in the function docs but forget to have roxygen rebuild the NAMESPACE file. – BeauchampImports:
section? – Tango@importFrom
and@import
roclets it can find and add the corresponding lines to the NAMESPACE file. It will also make sure that no line is repeated (even if the same@importFrom
appears in multiple places). – BandogDESCRIPTION Imports
as well, but that is irrelevant in this case. The only time the list of packages in DESCRIPTION Imports is used is when the package is installed to make sure that the packages needed for Importing are also installed. Here, OP is testing out the package on his own machine, so it seems safe to assume thathttr
is installed. – Trapezius