0

我创建了一个 R 包并将其提交给 CRAN。CMD 检查输出 1 注意:

有趣:全局变量“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() 非常有用,但无论是 this 还是 data.table 文档似乎都没有提供任何提示(我发现)这个具体问题。谢谢

如果我遇到此问题的功能的要点,请在下面更新。

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) }

4

1 回答 1

1

正如 Arun 所建议的那样,在我的情况下,将函数替换setkey()为。setkeyv()

这将创建一个 CMD 检查注:

data.table::setkey(dataImport, id)

这可以免费运行:

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

根据data.table 文档,使用 setkeyv() 似乎是等效的。@Arun 如果我错了,请纠正我!就结果而言,我的函数仍然通过了我对 class、colnames 和 ncol 的自动化测试。

无论如何,Arun 提到 setkey() 是在考虑交互使用的情况下创建的,因此它似乎不适合在函数和/或包中使用。

对于 CMD NOTES “全局变量没有可见的绑定”,还有一些其他建议,例如信息质量保证:

当我的 ggplot2 语法合理时,如何处理 R CMD 检查“全局变量没有可见绑定”注释?

R CMD检查中的全局变量注释没有可见的绑定

关于“无可见绑定......”问题的主题倾向于将其作为一个问题来解决。它似乎基于其来源(症状),即 CMD 检查。然而,尽管许多动作引发了相同的标志(症状),但在更深层次上,它们可能是由不同的动作(条件)产生的。

我喜欢 Arun 指出的这里使用的解决方案,因为它解决了使用此功能的特定情况(条件,而不是症状)。与上面链接中提到的其他解决方案不同,如果更普遍的话,可能同样合法。
当然,这种方法意味着弄清楚究竟是什么导致了音符,并找到替代方法。

于 2015-08-28T05:55:16.640 回答