我最近发现错误可能是由于包之间的冲突引起的,也就是说,两个(或更多)包可能具有类似命名的函数。我知道代码search ()
会生成按 R 读取它们的方式排序的包列表。还有args
代码给出了R读取的函数。
我首先想知道的是如何检测是否由于包之间的冲突而产生错误,其次如何找出哪些包发生冲突?最后,在检测到冲突之后,我们如何强制 R 专门使用其中一个包中的功能?
问问题
5869 次
3 回答
9
如果 R 加载一个新包,如果该新包包含工作环境中已经存在的任何功能,它将产生警告。所以如果你在包加载的时候注意一下,你可以看看有没有冲突。当存在冲突时,您可以强制 R 使用特定包中的函数,如下所示:
package_name::function_name
于 2013-04-11T13:02:01.823 回答
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
希望有帮助
于 2013-04-11T13:26:28.693 回答
8
我认为您正在寻找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
于 2013-04-11T13:42:58.517 回答