2013-04-11 148 views
6

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

+3

即尝试'冲突(detail = TRUE)' – 2013-04-11 13:47:21

回答

7

正如@保罗说,连接(例如,通过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 

希望帮助

+0

非常感谢Michele。这正是我需要的。 – Vara 2013-04-11 17:42:16

6

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

package_name::function_name 
6

我认为你正在寻找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 
+0

感谢您的回答Carl,我不知道这段代码。但是,我认为这有助于您事先知道哪些参数冲突。 – Vara 2013-04-11 17:46:34