10

I am trying to create an R package with a function using the J of data.table. When I run R CMD check, I have a NOTE : no visible global function definition for 'J' although I've added data.table as a dependency in the DESCRIPTION file.

Package: rfPred
Type: Package
Title: Assign rfPred functional prediction scores to a missense variants list
Version: 1.0
Date: 2013-03-14
Author: me
Maintainer:me
Depends: data.table
[..]

I've tried to use another function of the data.table package in the package I want to create, but I haven't the same problem as for J.

Do you have a solution ?

4

1 回答 1

10

J()作为一个独立的功能已从data.table. 它仅供内部使用DT[...],它仍然可以工作。但是对于依赖data.tableJ()正确使用的包,比如你的包,需要一个额外的步骤来避免注释(见下文)。

首先背景和为什么J()被删除。新闻摘录:

v1.8.2(2012 年 7 月):

  • J() 别名现在在 DT[...] 之外已弃用,但仍可在 DT[...] 内部工作,就像在 DT[J(...)] 中一样。J() 与 XLConnect (#1747) 和 rJava (#2045) 包中的函数 J() 冲突。对于 data.table 而言,更改更容易,也具有一些效率优势。当在 DT[...] 之外使用时,下一版本的 data.table 将从 J() 发出警告。之后的版本将删除它。只有这样才能解决与 rJava 和 XLConnect 的冲突。请在 DT[...] 之外直接使用 data.table() 而不是 J()。

v1.8.4(2012 年 11 月):

  • J() 现在发出警告(在DT[...]外部使用时),不推荐在 DT[...] 外部使用它。请参阅 v1.8.2 中的以下项目。在 DT[...] 之外直接使用 data.table() 而不是 J()。或者,自己定义一个别名。J() 将继续DT[...] 内工作,如文件所述。

v1.8.8(现在在 CRAN,2013 年 3 月):

  • J() 别名现在已在 DT[...]外部删除,但仍可在 DT[...] 内部工作;即,DT[J(...)] 很好。正如 v1.8.2 中的警告(请参阅此文件中的下文)并在 v1.8.4 中使用 warning() 弃用。这解决了与 XLConnect (#1747) 和 rJava (#2045) 包中的函数 J() 的冲突。请在 DT[...] 之外直接使用 data.table() 而不是 J()。

顺便说一句,r-devel 上还有一个最近的相关线程:
http ://r.789695.n4.nabble.com/conflict-between-rJava-and-data-table-tp4659935p4659984.html

R CMD check现在为您的包裹上产生的注释

您的包裹在J()内部使用DT[...]并且工作正常。唯一的问题是来自 R CMD 检查的注释:

no visible global function definition for 'J'

以下是所有已知选项:

  • 忽略注释。(我也不喜欢这个,只是作为一种选择)。只需要处理 WARNING 和 ERROR。
  • 替换Jlist。是等价的。
  • J=NULL在你的包中定义某个地方。(我们研究了data.table导出J=NULL,因此您不必这样做,但决定不这样做,因为在提示符下data.table输入的任何用户J都会看到NULL这可能会造成混淆。)
  • 或者?utils::globalVariables按照 Ben Bolker 在评论中的建议使用。

有关此特定注释的更多背景信息在此相关问题中:

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

于 2013-03-14T13:44:22.937 回答