猿问

错误:在R中找不到函数....

错误:在R中找不到函数....

我正在使用R并尝试some.function但我收到以下错误消息:

Error: could not find function "some.function"

这个问题经常出现。当你在R中遇到这种类型的错误时,你怎么解决它?


繁星coding
浏览 9615回答 4
4回答

ITMISS

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

叮当猫咪

当计算机在我的控制之下时,我通常可以解决这个问题,但在使用网格时更麻烦。当网格不是同源的时,并不是所有的库都可以安装,而我的经验通常是没有安装软件包,因为没有安装依赖项。为了解决这个问题,我检查以下内容:是否安装了Fortran?(寻找'gfortran'。)这会影响R中的几个主要包。是Java安装?Java类路径是否正确?检查包是否由管理员安装并可供相关用户使用。有时,用户会在错误的位置安装软件包,或者在没有适当访问权限的情况下运行。&nbsp;.libPaths()是一个很好的检查。检查lddR的结果,以确保共享库最好定期运行一个脚本,只需加载所需的每个包,并做一些小测试。这会在工作流程中尽早捕获包问题。这类似于构建测试或单元测试,除了它更像是一个烟雾测试,以确保基本的东西工作。如果包可以存储在网络可访问的位置,是吗?如果他们不能,有没有办法确保机器上的版本一致?(这可能看似OT,但正确的软件包安装包括正确版本的可用性。)包是否可用于给定的操作系统?不幸的是,并非所有软件包都可以跨平台使用&nbsp;这可以追溯到第5步。如果可能,尝试通过切换到适当的包装风格或在某些情况下关闭依赖关系来找到处理不同操作系统的方法。遇到这个问题后,其中一些步骤变得相当常规。尽管#7似乎是一个很好的起点,但它们的排列顺序与我使用它们的频率大致相同。

喵喵时光机

如果在检查包装时发生这种情况(R CMD检查),请查看您的NAMESPACE。您可以通过将以下语句添加到NAMESPACE来解决此问题:exportPattern("^[^\\\\.]")这会导出所有不以点(“。”)开头的内容。这允许您从点开始隐藏功能:.myHiddenFunction&nbsp;<-&nbsp;function(x)&nbsp;cat("my&nbsp;hidden&nbsp;function")
随时随地看视频慕课网APP
我要回答