2013-04-11 111 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