我最近发现错误可能是由于包之间的冲突引起的,也就是说,两个(或更多)包可能具有相似的命名功能。我知道代码search ()
生成以R读取它们的方式排序的包列表。还有args
代码给出了由R读取的函数。
我首先想知道的是如何检测是否由于包之间的冲突而产生错误,其次是如何找出哪些包有冲突?最后,在检测到冲突之后,我们如何强制R专门使用其中一个包中的函数?
答案 0 :(得分: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
希望有所帮助
答案 1 :(得分:7)
如果R加载新包,如果新包包含工作环境中已存在的任何函数,则会生成警告。因此,如果您在程序包加载过程中注意,可以查看是否存在任何冲突。当存在冲突时,您可以强制R使用特定包中的函数,如下所示:
package_name::function_name
答案 2 :(得分:7)
我认为你正在寻找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