【问题标题】:Using data.table in package - fail on check在包中使用 data.table - 检查失败
【发布时间】:2017-11-28 17:28:36
【问题描述】:

我想在我编写的包中使用 data.tables 作为主干。

由于我不想一直使用::(并避免使用[:= 运算符的复杂性),因此我将data.table 包含为Depends 而不是在DESCRIPTION 中作为导入可以直接使用所有的dt函数。

如果我构建包一切正常,但运行“检查”会导致错误(来自 DTTest.Rcheck/00install.out):

* installing *source* package ‘DTTest’ ...
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
Error : package ‘data.table’ required by ‘DTTest’ could not be found
Error: loading failed
Execution halted
ERROR: loading failed

这个包中唯一的函数就是this

#' Creates a data.table
#'
#' @return a data.table
#' @export
#'
#' @examples
#' create_dt()
create_dt <- function() {
  dt <- data.table(x = 1:10)
  dt[, x_2 := x^2]
  return(dt[])
}

DESCRIPTION 包含Depends: data.table,否则文件是标准的 RStudio 新包文件。

你可以在这里找到整个包:https://github.com/DavZim/DTTest

任何想法如何解决这个问题?

【问题讨论】:

  • 你试过data.table::data.table(x = 1:10)
  • 将data.table放入Imports,将包导入NAMESPACE。这就是我所做的,它适用于我在 CRAN 上提供的一个包。
  • 请学习编写 R 扩展。正确的语法是 import(data.table)。为什么要加引号?
  • 我所做的只是将 data.table 添加到 DESCRIPTION 中的 Imports 并告诉 roxygen2 到 #' @import data.table。但是,您的包在我的系统上构建和加载都很好。这表明您的设置有问题,可能是您的.libPaths()
  • 请随时将此作为答案发布。

标签: r package data.table


【解决方案1】:

在 Roland 提供了一些有用的 cmets 之后,我找到了解决问题的方法。它确实与我的.libPaths() 有关,与代码无关。

在检查包时,R 尝试在 .libPaths() 的第一个库中搜索包。碰巧,我有四个路径(/usr/local/.../usr/lib/R/site-library/usr/lib/R/library/home/user/R/x86_64-pc-linux-gnu-library/3.4)并且 data.table 安装在最后一个路径中。

解决方案(更像是现阶段的解决方法)是在第一个中安装 data.table。

为此,我以管理员权限(在我的情况下为sudo R)执行了 R,并使用install.packages("data.table", lib = .libPaths()[1]) 安装了 data.table。

现在检查按预期通过了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多