首页 文章

setkey()生成关于R CMD检查的注释 - 没有可见的全局变量绑定

提问于
浏览
0

我创建了一个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 回答

  • 0

    在我的案例中有效的是用Arun建议用 setkeyv() 替换函数 setkey() .

    这会创建一个CMD检查注意:

    data.table::setkey(dataImport, id)
    

    这运行免费注:

    data.table::setkeyv(dataImport, cols = "id")
    

    基于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 正在引起这个音符,并找到一个替代方案 .

相关问题