在'NAMESPACE'中指定的S4出口,但没有在包中定义。

问题描述 投票:3回答:1

我刚刚完成了一个R包的一些小更新,我在CRAN上已经有几年了(有一段时间没有更新了)。 我的软件包在我的本地机器上和winbuilder上都通过了Check,但它刚刚从CRAN上弹回来,并显示了以下信息

checking whether package 'riverdist' can be installed ... WARNING
Found the following significant warnings:
  Warning: S4 exports specified in 'NAMESPACE' but not defined in package 'riverdist'

我使用roxygen2来构建我的包NAMESPACE,但据我所知,没有任何S4导出。

也许这可能与R 4.0.0版本的变化有关?

如果有人遇到过这个错误,我很想听听你是如何解决的。 谢谢!我刚刚完成了对一个R版本4.0.0的小更新。

r r-package
1个回答
1
投票

已解决。roxygen2的 @exportClass 添加到NAMESPACE exportClasses() 这是针对S4类的。S3类不需要导出,只需要导出构造函数和方法函数,这需要通过使用 @export. 在我的情况下,删除所有 @exportClass 命令解决了问题,因为我的包只定义了S3类。所以,确实在诊断S4导出时,WARNING信息是正确的。在以下帮助下找到了答案 来自于R-package-devel邮件列表中的一个帖子。 从昨天开始。

在我的包中,问题只存在于一个包中,而其他9个包也会触发警告。

只有在 r-devel (未来的 R 4.1.0) 下才会触发警告。


1
投票

我从 rdevel 收到了这条消息

"这是R-devel中的一个新检查。的NEWS说。

R CMD检查等现在警告当一个包导出不存在的S4类或方法时,也在没有 "方法 "的情况下。

在您的例子中,NAMESPACE包含了

输出类(分类)

输出类(gonad_mature)

出口类(morphMat)

但你的包并没有定义这些S4类。

你似乎指示 roxygen2 使用@exportClass 标签手动创建这些无效的指令,而不是只使用@export。只要从你的源文件中删除错误的@exportClass标签,然后重新生成你的NAMESPACE即可。

问候。

    Sebastian Meyer"

https:/[email protected]

© www.soinside.com 2019 - 2024. All rights reserved.