11

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

4

3 回答 3

9

如果 R 加载一个新包,如果该新包包含工作环境中已经存在的任何功能,它将产生警告。所以如果你在包加载的时候注意一下,你可以看看有没有冲突。当存在冲突时,您可以强制 R 使用特定包中的函数,如下所示:

package_name::function_name
于 2013-04-11T13:02:01.823 回答
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

希望有帮助

于 2013-04-11T13:26:28.693 回答
8

我认为您正在寻找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
于 2013-04-11T13:42:58.517 回答