23

我有一个在 RStudio 中构建的 R 包,我们称之为my_pkg. 当我devtools::load_all(".")在 RStudio 中运行(特别是使用Ctrl + Shift + L快捷方式)时,我收到以下消息:

Loading my_pkg
Warning messages:
1: character(0) 
2: character(0) 
3: character(0) 
4: character(0) 
5: character(0)

包中的所有功能都可以正常工作。我的NAMESPACEDESCRIPTION文件是完整的,没有语法错误。但是,当我运行?my_pkg时,帮助文件与文件中提供的规范不匹配DESCRIPTION。当我删除ImportsfromDESCRIPTION时,不再有character(0)警告消息。当然,我需要那些进口。当我更改Imports为 时Suggests,会出现character(0)警告消息。

这是描述文件的内容,为了保护 IP 做了一些改动。

Package: scoutdroid
Title: This is where the title is.
Version: 0.1
Authors@R: "Ben Hanowell <benjamin.hanowell@redfin.com> [aut, cre]"
Description: This is where the description is.
Depends:
    R (>= 3.1.0)
Imports:
    dplyr,
    lubridate,
    mboost,
    randomForestSRC,
    RODBC,
    stringr
License: file LICENSE
LazyData: true

这里是NAMESPACE

# Generated by roxygen2 (4.0.1): do not edit by hand

import(RODBC)
import(dplyr)
import(lubridate)
import(mboost)
import(parallel)
import(randomForestSRC)
import(stringr)

当我在 Build 选项卡中使用 RStudio Build & Reload 按钮时,我收到以下警告:

** 为延迟加载准备包

Warning: replacing previous import by 'lubridate::intersect' when loading 'scoutdroid'
Warning: replacing previous import by 'lubridate::setdiff' when loading 'scoutdroid'
Warning: replacing previous import by 'lubridate::union' when loading 'scoutdroid'

编辑添加了更多细节以帮助人们了解可能发生的情况。

编辑 2我也添加了DESCRIPTION文件,虽然我没有提供完整的包,这是专有的。

编辑 3添加了NAMESPACE.

编辑 4添加了在 Build 选项卡中使用 RStudio Build & Reload 按钮时出现的警告。

4

2 回答 2

25

在评论中进行了一些对话之后,我们发现load_all由于函数名称冲突,在加载包时实际上会启动给您的空警告。

问题是您正在从包中导入一个函数,然后覆盖该函数。当发生这种情况时,当您在 RStudio 中单击“Build & Reload”时,R 会抛出警告:

Warning: replacing previous import by 'lubridate::intersect' when loading 'scoutdroid'
Warning: replacing previous import by 'lubridate::setdiff' when loading 'scoutdroid'
Warning: replacing previous import by 'lubridate::union' when loading 'scoutdroid'

看起来load_all可能试图消除这些警告(只是猜测),这就是您看到character(0)而不是实际警告的原因。(这些特殊的警告很难消除。)

导入整个包的命名空间通常不是一个好主意。您应该只导入您需要的符号。有关更多信息,请参阅我的这篇文章

解决方案是使用importFrom而不是import在您的 NAMESPACE 文件中。

于 2014-09-30T01:04:55.717 回答
2

这也可能是由于roxygen2文档中的链接断开所致。例如,当您使用错误名称链接到包外部的函数时,请说\link[stringi]{STRI_C}而不是\link[stringi]{stri_c}

于 2018-07-10T09:27:52.360 回答