如何解决加载 R 包时出错:“检查 is.data.table(DT) == TRUE
以下在控制台中运行良好:
[^\W\d]*
但如果我将这些行包含在一个包中,并使用 root@swrcmsdbm:/# /usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
MySQL Cluster Management Server mysql-5.7.32 ndb-7.6.16
root@swrcmsdbm:/# usr/bin/ndb_config -q MaxNoOfAttributes
2560000 2560000
加载它,我会收到此错误:
library(data.table)
dt = data.table(x = 1:5)
dt[,y := 1]
显然,devtools::load_all(".")
是导入的,因为它不会在第二行失败。那么这里出了什么问题,我该如何让它运行?
这个包是通过 Error in `:=`(y,1) :
Check that is.data.table(DT) == TRUE. Otherwise,:= and `:=`(...) are defined for use in j,once only and in particular ways. See help(":=").
创建的,它只有这三行代码。这是我能做的最小的repex。如果我将代码放在函数中并通过 roxygen2 (data.table
) 加载 usethis::create_package()
,我会得到同样的错误。我在描述导入中有 data.table
。
错误有以下痕迹:
"' @import data.table
data.table (>= 1.14.0)
:
14. stop("Check that is.data.table(DT) == TRUE. Otherwise,once only and in particular ways.
See help(\":=\").")
13. `:=`(y,1)
12. `[.data.frame`(x,i,j)
11. `[.data.table`(dt,`:=`(y,1)) at tmp.R#3
10. dt[,y := 1] at tmp.R#3
9. eval(exprs[i],envir)
8. eval(exprs[i],envir)
7. source_one(file,encoding,envir = envir)
6. source_many(paths,env)
5. force(code)
4. withr_with_dir(path,source_many(paths,env))
3. load_code(path)
2. pkgload::load_all(path = path,reset = reset,recompile = recompile,export_all = export_all,helpers = helpers,quiet = quiet,...)
1. devtools::load_all(".")
解决方法
解决方案:使用 roxygen2 将其添加到包中的某处:
#' @importFrom data.table ":="
NULL
这会将 importFrom(data.table,":=")
写入您的 NAMESPACE 文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。