我注意到在检查一个包时,我获得了"全局变量没有可见绑定"的注释,当我使用类似函数时subset,使用列表元素的逐字名称作为参数.
例如,使用数据框:
foo < - data.frame(a = c(TRUE,FALSE,TRUE),b = 1:3)
我可以做愚蠢的事情,比如:
subset(foo,a)
transform(foo,a=b)
Run Code Online (Sandbox Code Playgroud)
哪个工作如预期.然而,R CMD中的R代码检查不理解这些引用元素并且抱怨没有任何可见的全局变量绑定.
虽然这个工作正常,但我真的不喜欢在我的包中加注,并且更喜欢它通过检查而没有任何错误,警告和注释.我也不想过多地修改我的代码.有没有办法编写这些代码,以便明确参数不引用全局变量?
我正在尝试使用Jdata.table 创建一个带有函数的R包.当我运行时R CMD check,我有一个注意:'J'没有可见的全局函数定义,尽管我已经在DESCRIPTION文件中添加了data.table作为依赖项.
包:rfPred
类型:包
标题:将rfPred功能预测分数分配给错误变体列表
版本:1 . 0日期
:2013-03-14
作者:me
维护者:我
取决于:data.table
[..]
我试图在我想要创建的包中使用data.table包的另一个函数,但是我和J.没有相同的问题.
你有解决方案吗 ?
这是我在@sds回答这个问题时的一个观察结果.
首先,让我打开跟踪消息data.table:
options(datatable.verbose = TRUE)
dt <- data.table(a = c(rep(3, 5), rep(4, 5)), b=1:10, c=11:20, d=21:30, key="a")
Run Code Online (Sandbox Code Playgroud)
现在,假设有人希望得到按列分组的所有列的总和a,那么,我们可以这样做:
dt.out <- dt[, lapply(.SD, sum), by = a]
Run Code Online (Sandbox Code Playgroud)
现在,假设我还要添加属于每个组的条目数dt.out,那么我通常按引用分配它,如下所示:
dt.out[, count := dt[, .N, by=a][, N]]
# or alternatively
dt.out[, count := dt[, .N, by=a][["N"]]]
Run Code Online (Sandbox Code Playgroud)
在这个通过引用的赋值中,其中一个消息data.table产生的是:
RHS for item 1 has been duplicated. Either NAMED vector or recycled list RHS.
Run Code Online (Sandbox Code Playgroud)
这是来自data.table的源目录中的文件的消息assign.C.我不想在这里粘贴相关的片段,因为它大约有18行.如有必要,只需发表评论即可粘贴代码.dt[, .N, by=a][["N"]]只是给[1] 5 5 …