在存在NAMESPACE的情况下,另一个问题是你试图从包foo运行一个未导出的函数。
例如(人为,我知道,但是):> mod plot.prcomp(mod)Error: could not find function "plot.prcomp"
首先,你不应该直接调用S3方法,但假设plot.prcomp在包foo中实际上是一些有用的内部函数。如果您知道自己在做什么,要调用此类函数需要使用:::。您还需要知道找到该函数的命名空间。使用getAnywhere()我们发现该函数在包统计中:> getAnywhere(plot.prcomp)A single object matching ‘plot.prcomp’ was found
It was found in the following places
registered S3 method for plot from namespace stats
namespace:stats
with valuefunction (x, main = deparse(substitute(x)), ...) screeplot.default(x, main = main, ...)
所以我们现在可以直接调用它:> stats:::plot.prcomp(mod)
我plot.prcomp只是用一个例子来说明目的。在正常使用中,您不应该像这样调用S3方法。但正如我所说,如果您要调用的函数存在(例如它可能是隐藏的实用程序函数),但是在a中namespace,R将报告它无法找到该函数,除非您告诉它要查找哪个命名空间。
将此与以下内容进行比较: stats::plot.prcomp 上述操作失败,因为在stats使用时plot.prcomp,它不会导出,stats因为错误正确地告诉我们:错误:'plot.prcomp'不是'namespace:stats'中的导出对象
这记录如下:pkg :: name返回命名空间pkg中导出的变量名的值,而pkg ::: name返回内部变量名的值。