2013-04-11 2 views
6

Недавно я узнал, что ошибки могут быть вызваны конфликтами между пакетами, то есть два (или более) пакета могут иметь аналогичные функции. Я знаю, что код search() создает список пакетов, упорядоченных так, как R читает их. Существует также код args, который дает функцию, считанную R.
. Прежде всего я хотел бы знать, как определить, возникает ли ошибка из-за конфликтов между пакетами, а во-вторых, как определить, какие пакеты конфликтуют? Наконец, после обнаружения конфликтов, как мы можем заставить R специально использовать функцию из одного из пакетов?Обнаружение конфликтов между пакетами в R

+3

т.е. попытаться 'конфликты (деталь = TRUE)' –

ответ

7

Как говорит @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 

надежда, что помогает

+0

Большое спасибо Мишель. Это именно то, что мне нужно. – Vara

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

Спасибо за ответ Карл, я не знал об этом коде. Тем не менее, я думаю, что это полезно, когда вы заранее знаете, какой именно конфликт конфликтует. – Vara