Недавно я узнал, что ошибки могут быть вызваны конфликтами между пакетами, то есть два (или более) пакета могут иметь аналогичные функции. Я знаю, что код search()
создает список пакетов, упорядоченных так, как R читает их. Существует также код args
, который дает функцию, считанную R.
. Прежде всего я хотел бы знать, как определить, возникает ли ошибка из-за конфликтов между пакетами, а во-вторых, как определить, какие пакеты конфликтуют? Наконец, после обнаружения конфликтов, как мы можем заставить R специально использовать функцию из одного из пакетов?Обнаружение конфликтов между пакетами в R
ответ
Как говорит @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
надежда, что помогает
Большое спасибо Мишель. Это именно то, что мне нужно. – Vara
Если R загружает новый пакет, он выдаст предупреждение, если этот новый пакет содержит любые функции, которые уже присутствуют в рабочей среде. Поэтому, если вы обратите внимание во время загрузки пакета, вы можете увидеть, есть ли какие-либо конфликты. Когда возникают конфликты, вы можете заставить R использовать функцию от конкретного пакета, как это:
package_name::function_name
Я думаю, что вы ищете 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
Спасибо за ответ Карл, я не знал об этом коде. Тем не менее, я думаю, что это полезно, когда вы заранее знаете, какой именно конфликт конфликтует. – Vara
т.е. попытаться 'конфликты (деталь = TRUE)' –