如何在R包中导入GitHub上的data.table开发版并解决env参数报错
问题:R包中无法导入data.table开发版v1.14.9以使用env参数
背景
data.table开发版v1.14.9新增了env参数,这是用于data.table语言编程的新接口,特别适合在函数中使用data.table。我开发自身R包时想要使用该接口,但无法将data.table开发版导入包中。
已尝试的操作
- 使用
data.table::update_dev_pkg()更新data.table,交互式测试带env参数的函数一切正常; - 在包内通过
load_all()使用同一函数时出现报错; - 在DESCRIPTION文件中添加
Remotes: github::Rdatatable/data.table; - 在DESCRIPTION文件中加入
Additional_repositories: https://Rdatatable.gitlab.io/data.table; - 将其改为
additional_repositories: https://github.com/Rdatatable/data.table.git; - 查阅Wickham《R-packages》中关于导入非标准依赖的内容。
以上方法均无效,我不确定这些字段中应填写什么内容才能将最新的data.table开发版导入我的包中。
最小示例
该函数根据定义文件(.lbl)将数据文件(.dtt)中的数字代码替换为字符值。
# 仅交互式使用,不要在包内加载 data.table::update_dev_pkg() library(purrr) library(data.table) # 包内使用的函数 make_labels <- function(.dtt,.lbl){ f <- function(.dtt,clm,val,lbl){ .dtt[ , clm := as.character(clm) , env = list(clm=clm) ][ clm == val , clm := lbl , env = list(clm=clm,val=val,lbl=I(lbl)) ] } purrr::pwalk(.lbl,f,.dtt) } # 示例数据 dtt <- data.table::data.table( v1 = rep(1:2,5) ,v2 = rep(1:5,2) ) lbl <- data.table::data.table( clm = c(rep("v1",2),rep("v2",5)) ,val = c(1:2,1:5) ,lbl = letters[1:7] ) # 运行函数 make_labels(dtt,lbl)
报错信息
交互式加载该函数时运行正常,但通过NAMESPACE导入机制(在DESCRIPTION中添加上述Remotes字段)并使用devtools::load_all()加载包内函数时,R抛出如下错误:
> make_labels(dtt,lbl)Error in `pmap()`: ℹ In index: 1. Caused by error: ! Check that is.data.table(DT) == TRUE. Otherwise, :=, `:=`(...) and let(...) are defined for use in j, once only and in particular ways. See help(":="). Run `rlang::last_trace()` to see where the error occurred.
内容的提问来源于stack exchange,提问作者Winfried
相关产品推荐
相关产品推荐

