gpt4 book ai didi

r - 如何将 data.table::fread 包装在你自己的包中,具有 bit64 功能?

转载 作者:行者123 更新时间:2023-12-01 12:36:41 29 4
gpt4 key购买 nike

我有一个包含调用 fread 函数的包来自 data.tabledata.table 在其 DESCRIPTION 文件的 Suggests 字段中包含 bit64 包,这使 fread 能够导入大整数作为integer64 而不是 numeric。我的包中默认需要此功能。

这是一个可重现的例子,在 R 3.1.3 下(早期版本没有这个问题)。


尝试 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"
)

当我运行 R CMD check 时,

library(roxygen2)
library(devtools)
roxygenize("test")
check("test")

我得到以下注意:

* 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.

尝试 2

documentation建议将 library 替换为 requireNamespace .这会检查包是否存在,但不会将其加载到 R 的搜索路径中。

如果我将 read_data 的定义更新为:

read_data <- function(...)
{
if(!requireNamespace('bit64'))
{
warning('bit64 not available.')
}
fread(...)
}

然后 R CMD check 运行顺利,但是由于 bit64 现在没有加载,fread 没有读取长整数的能力.


尝试 3

如果我更改 DESCRIPTION 以便 bit64 位于 Depends 部分(而不是 Suggests,并且保持 read_data 与尝试 2 相同,或将其简化为

read_data <- function(...)
{
fread(...)
}

然后 R CMD check 给出 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.

我不太确定在这种情况下我应该导入什么。


尝试 4

如果我在Depends部分保留bit64,并使用read_data的原始定义,

read_data <- function(...)
{
library(bit64)
fread(...)
}

然后 R CMD check 给出 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'

我觉得应该有一些 DESCRIPTION 和函数定义的神奇组合,给我 bit64 功能并干净地通过 R CMD 检查 ;我只是看不到我错过了什么。

我该怎么做?

最佳答案

尝试 3 最接近;我只需要在 roxygen 文档中添加一个额外的 @import bit64

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>
Depends: bit64
Imports: data.table
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.
#' @import bit64
#' @importFrom data.table fread
#' @export
read_data <- function(...)
{
fread(...)
}",
file = "test/R/read_data.R"
)

关于r - 如何将 data.table::fread 包装在你自己的包中,具有 bit64 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28961735/

29 4 0