我创建了一个R包并将其提交给CRAN . CMD检查输出1注意:
fun:全局变量'id'没有可见的绑定
CRAN建议我解决它 .
fun()(我的一个函数)是一个自定义导入来读取由另一个软件创建的文件 . 这些文件是非常大的数据集 . 因此,由于我正在优化导入,因此我使用data.table和set key,这不仅有助于提高性能,还需要运行后续函数,例如foverlaps() .
我正在使用:
data.table::setDT(dataImport)
data.table::setkey(dataImport, id)
为什么setkey()会创建此注释?
如何在不创建注释的情况下设置密钥?
以下QA(What is the purpose of setting a key in data.table?)对于理解setkey()非常有用,但是这个和data.table文档似乎都没有为这个特定问题的出现提供任何线索(我发现) . 谢谢
更新-Below如果我面临这个问题的功能的要点 .
readoqcsv <- function(x) { dataImport <- utils::read.table(file = x, header = TRUE, sep = "," , dec = "." , colClasses = c("character", "integer", "character", "character", "integer", "NULL", "NULL", "NULL", "integer", "NULL", "NULL", "NULL", "NULL", "factor", "NULL", "NULL", "NULL", "NULL", "NULL"), comment.char = "")
data.table::setDT(dataImport)
dataImport$timeStampO <- strptime(dataImport$timeStampO, "%m/%d/%y %H:%M")
dataImport$session_started <- strptime(dataImport$session_started,"%m/%d/%y %H:%M")
dataImport$session_finished <- strptime(dataImport$session_finished,"%m/%d/%y %H:%M")
dataImport$id <- c(1:nrow(dataImport))
下面是(如果运行)引起注释的行:
# data.table::setkey(dataImport, id)
return(dataImport)
}
1 回答
在我的案例中有效的是用Arun建议用
setkeyv()
替换函数setkey()
.这会创建一个CMD检查注意:
这运行免费注:
基于data.table documentation,使用setkeyv()似乎等效 . @Arun请纠正我,如果我错了!在结果方面,我的函数仍然通过我的类,colnames和ncol的自动化测试 .
无论如何,Arun提到setkey()是在考虑交互使用的情况下创建的,因此在函数和/或包中使用它似乎不合适 .
对于CMD NOTES“没有可见的全局变量绑定”,还有其他一些建议,例如信息量QAs:
How can I handle R CMD check "no visible binding for global variable" notes when my ggplot2 syntax is sensible?
No visible binding for global variable Note in R CMD check
关于“无可见绑定......”问题的线程倾向于将其作为一个单一问题来解决 . 它似乎是基于其来源(症状),CMD检查 . 然而,尽管许多行动都提出了相同的标志(症状),但是更深层次的行动可能会由不同的行为(条件)产生 .
我喜欢这里使用的解决方案,由Arun指出,因为它解决了使用此功能的特定情况(条件,而不是症状) . 与其他解决方案不同,可能同样合法,如果更一般,在上面的链接上提到 .
当然,这种方法意味着弄清楚 exactly 正在引起这个音符,并找到一个替代方案 .