检测R中包之间的冲突

时间:2013-04-11 12:52:34

标签: r package conflict

我最近发现错误可能是由于包之间的冲突引起的,也就是说,两个(或更多)包可能具有相似的命名功能。我知道代码search ()生成以R读取它们的方式排序的包列表。还有args代码给出了由R读取的函数。
我首先想知道的是如何检测是否由于包之间的冲突而产生错误,其次是如何找出哪些包有冲突?最后,在检测到冲突之后,我们如何强制R专门使用其中一个包中的函数?

3 个答案:

答案 0 :(得分:9)

正如@Paul所说,在附加(例如通过library功能)包裹时,您可能会得到:

> library("gdata", lib.loc="C:/Program Files/R/R-2.15.3/library")
gdata: read.xls support for 'XLS' (Excel 97-2004) files ENABLED.

gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.

Attaching package: ‘gdata’

The following object(s) are masked from ‘package:stats’:

    nobs

The following object(s) are masked from ‘package:utils’:

    object.size

当你得到“以下对象被屏蔽”时,R会将对这些函数的调用视为对新包中函数的调用,在我的示例gdata中。

您可以通过以下方式避免这种情况:

> nobs
function (object, ...) 
UseMethod("nobs")
<environment: namespace:gdata>
> stats::nobs
function (object, ...) 
UseMethod("nobs")
<bytecode: 0x0000000008a92790>
<environment: namespace:stats

希望有所帮助

答案 1 :(得分:7)

如果R加载新包,如果新包包含工作环境中已存在的任何函数,则会生成警告。因此,如果您在程序包加载过程中注意,可以查看是否存在任何冲突。当存在冲突时,您可以强制R使用特定包中的函数,如下所示:

package_name::function_name

答案 2 :(得分:7)

我认为你正在寻找getAnywhere,它将告诉你它的论证存在的所有地方。例如。 (在我目前的负载集中):

Rgames> getAnywhere(logit)
2 differing objects matching ‘logit’ were found
in the following places
  package:boot
  package:pracma
  namespace:boot
  namespace:pracma
Use [] to view one of them