问题 描述顺序:在R 2.14.0包检查中导入:和NAMESPACE import()


我试图在检查包时追逐功能名称之间的冲突。我最终可能会直接询问这个问题,但首先,我想知道三件事情,R-exts似乎都没有提及:

  1. DESCRIPTION:Imports和NAMESPACE导入()中列出的包应该是相同的,对吧?
  2. 在任何一个列表中,导入的顺序是否有问题?如果是的话,是否有关于如何订购的一般建议?
  3. 我使用R --vanilla CMD检查pkg_name以避免我的.Rprofile干扰。当我的.Rprofile处于活动状态并包含库(pkg_name)语句时,这些语句的顺序是否重要?

6169
2017-11-06 14:39


起源



答案:


你问了三个问题。

1.列出包裹 DESCRIPTION 以及 NAMESPACE

每个包都列在 DESCRIPTION  Imports: 必须有匹配的条目 NAMESPACE  import(...)。进入 DESCRIPTION 可能包含版本信息,但在 NAMESPACE 你只能命名包。

注意小心翼翼:法术 Imports 有资本 I 和尾随 s 在描述中

例如:

描述

Imports:
    stringr (>= 0.5)

NAMESPACE

import(stringr)

2.订单事宜

你的包裹 load 要么 import 稍后屏蔽先前加载或导入的包。这仅在导入导出具有相同名称的函数的包时才有意义。

例如,两者 lattice 和 ggplot2 出口 layer 功能。因此,如果你第一次导入 lattice 接着 ggplot2, 代表着 ggplot2::layer 将面具 lattice::layer

换句话说,使用 layer 会参考 ggplot2::layer。如果你想参考 lattice 你需要明确引用的版本 lattice::layer 在你的功能。

3.加载包的顺序也很重要

出于同样的原因,加载包的顺序(在脚本或.Rprofile中)很重要。您加载的任何新包将在先前加载的包中屏蔽具有相同名称的函数。

当发生这种情况时,R会做出明智的事情并在控制台消息中告诉您。

以下是加载时发生的屏蔽示例 reshape 包,这取决于 plyr 但也掩盖了一些功能 plyr

library(reshape)
Loading required package: plyr

Attaching package: 'plyr'

The following object(s) are masked from 'package:braidppt':

    .


Attaching package: 'reshape'

The following object(s) are masked from 'package:plyr':

    rename, round_any

15
2017-11-06 16:54



谢谢Andrie ......你的回答很清楚,并证实了我的想法。现在我必须弄清楚需要处理的顺序。也许它太明显了,但在R-exts中关于这个的说明可能会有用。 - Bryan Hanson
环顾四周,我看到>冲突(细节=真)可以帮我找到问题。 - Bryan Hanson
请注意,如果您有冲突,您应该使用 importsFrom 只需从每个包中导入所选的功能 - hadley


答案:


你问了三个问题。

1.列出包裹 DESCRIPTION 以及 NAMESPACE

每个包都列在 DESCRIPTION  Imports: 必须有匹配的条目 NAMESPACE  import(...)。进入 DESCRIPTION 可能包含版本信息,但在 NAMESPACE 你只能命名包。

注意小心翼翼:法术 Imports 有资本 I 和尾随 s 在描述中

例如:

描述

Imports:
    stringr (>= 0.5)

NAMESPACE

import(stringr)

2.订单事宜

你的包裹 load 要么 import 稍后屏蔽先前加载或导入的包。这仅在导入导出具有相同名称的函数的包时才有意义。

例如,两者 lattice 和 ggplot2 出口 layer 功能。因此,如果你第一次导入 lattice 接着 ggplot2, 代表着 ggplot2::layer 将面具 lattice::layer

换句话说,使用 layer 会参考 ggplot2::layer。如果你想参考 lattice 你需要明确引用的版本 lattice::layer 在你的功能。

3.加载包的顺序也很重要

出于同样的原因,加载包的顺序(在脚本或.Rprofile中)很重要。您加载的任何新包将在先前加载的包中屏蔽具有相同名称的函数。

当发生这种情况时,R会做出明智的事情并在控制台消息中告诉您。

以下是加载时发生的屏蔽示例 reshape 包,这取决于 plyr 但也掩盖了一些功能 plyr

library(reshape)
Loading required package: plyr

Attaching package: 'plyr'

The following object(s) are masked from 'package:braidppt':

    .


Attaching package: 'reshape'

The following object(s) are masked from 'package:plyr':

    rename, round_any

15
2017-11-06 16:54



谢谢Andrie ......你的回答很清楚,并证实了我的想法。现在我必须弄清楚需要处理的顺序。也许它太明显了,但在R-exts中关于这个的说明可能会有用。 - Bryan Hanson
环顾四周,我看到>冲突(细节=真)可以帮我找到问题。 - Bryan Hanson
请注意,如果您有冲突,您应该使用 importsFrom 只需从每个包中导入所选的功能 - hadley