I have a package containing a function that calls fread from data.table. data.table has the bit64 package in the Suggests field of its DESCRIPTION file, which gives fread the capability to import large integers as
integer64 rather than numeric. I need this capability by default in my package.
Here's a reproducible example, under R 3.1.3 (earlier versions don't have this issue).
Attempt 1
Vectorize(dir.create)(c("test", "test/R", "test/man"))
cat(
"Package: test
Title: Test pkg
Description: Investigate how to use suggested package
Version: 0.0-1
Date: 2015-03-10
Author: Richie Cotton
Maintainer: Richie Cotton <a@b.com>
Imports: data.table
Suggests: bit64
License: Unlimited
",
file = "test/DESCRIPTION"
)
cat(
"#' Read data
#'
#' Wrapper to \\code{fread} that loads bit64 first
#' @param ... Passed to fread.
#' @return A data frame of uniformly distributed random numbers and their index.
#' @importFrom data.table fread
#' @export
read_data <- function(...)
{
library(bit64)
fread(...)
}",
file = "test/R/read_data.R"
)
When I run R CMD check,
library(roxygen2)
library(devtools)
roxygenize("test")
check("test")
I get the following NOTE:
* checking dependencies in R code ... NOTE
'library' or 'require' call to 'bit64' in package code.
Please use :: or requireNamespace() instead.
See section 'Suggested packages' in the 'Writing R Extensions' manual.
Attempt 2
The documentation suggests replacing library with requireNamespace. This checks to see if the package exists, but doesn't load it onto R's search path.
If I update the definition of read_data to:
read_data <- function(...)
{
if(!requireNamespace('bit64'))
{
warning('bit64 not available.')
}
fread(...)
}
then R CMD check runs smoothly, but since bit64 is now not loaded, fread doesn't have the ability to read long integers.
Attempt 3
If I change the DESCRIPTION so that bit64 is in the Depends section (instead of Suggests, and keep read_data as in attempt 2, or simplify it to
read_data <- function(...)
{
fread(...)
}
then R CMD check gives the NOTE:
* checking dependencies in R code ... NOTE
Package in Depends field not imported from: 'bit64'
These packages need to be imported from (in the NAMESPACE file)
for when this namespace is loaded but not attached.
I'm not quite sure what I should be importing in this case.
Attempt 4
If I keep bit64 in the Depends section, and use the original definition of read_data,
read_data <- function(...)
{
library(bit64)
fread(...)
}
then R CMD check gives the NOTE:
* checking dependencies in R code ... NOTE
'library' or 'require' call to 'bit64' which was already attached by Depends.
Please remove these calls from your code.
Package in Depends field not imported from: 'bit64'
I feel like there should be some magic combination of DESCRIPTION and function definitions that gives me the bit64 functionality and passes R CMD check cleanly; I just can't see what I've missed.
How can I do this?