这是一个常见问题,所以请尽可能完整。答案是一个社区答案,所以如果您认为遗漏了什么,请随意编辑。 这个问题在meta上进行了讨论和批准。

我用R做了一些尝试。函数,但我得到以下错误消息:

Error: could not find function "some.function"

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


当前回答

即使函数名是有效的,如果缺少一些强制性参数(即没有提供足够的参数),也会发生此错误。 我在Rcpp上下文中得到了这个,在那里我写了一个带有可选参数的c++函数,并且没有在R中提供这些参数。似乎来自c++的可选参数被R视为强制性的。因此,R无法为正确的名称找到匹配的函数,但参数数量不正确。

Rcpp函数:SEXP RcppFunction(arg1, arg2=0) {} R呼叫: RcppFunction(0)引发错误 RcppFunction(0,0)没有

其他回答

另一个问题是,在存在命名空间的情况下,您试图从包foo运行一个未导出的函数。

例如(我知道有些做作,但是):

> mod <- prcomp(USArrests, scale = TRUE)
> 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 value

function (x, main = deparse(substitute(x)), ...) 
screeplot.default(x, main = main, ...)
<environment: namespace:stats>

所以我们现在可以直接调用它:

> stats:::plot.prcomp(mod)

我用过情节。Prcomp只是作为一个例子来说明目的。在正常使用中,不应该像这样调用S3方法。但正如我所说,如果您想调用的函数存在(例如,它可能是一个隐藏的实用程序函数),但在一个名称空间中,R将报告它无法找到该函数,除非您告诉它查找哪个名称空间。

将其与以下内容进行比较: 统计数据::plot.prcomp 上述方法失败了,因为while stats使用了情节。Prcomp,它不是从统计数据导出的错误正确地告诉我们:

错误:“阴谋。Prcomp不是从namespace:stats导出的对象

记录如下:

Pkg::name返回命名空间Pkg中导出的变量名的值,而Pkg:::name返回内部变量名的值。

如果您正在使用parallelMap,则需要将自定义函数导出到从属作业,否则将得到“无法找到函数”的错误。

如果在parallelStart上设置了一个非缺失的级别,则应该将相同的参数传递给parallelExport,否则将得到相同的错误。所以这一点应该严格遵守:

parallelStart(mode = "<your mode here>", N, level = "<task.level>")
parallelExport("<myfun>", level = "<task.level>")

我得到了同样的错误,我正在运行版本.99xxx,我从帮助菜单中检查更新并将我的RStudio更新到1.0x,然后错误没有出现

所以很简单的解决方法,就是更新你的R Studio

您可以通过函数调用的名称间距::来修复此错误

comparison.cloud(colors = c("red", "green"), max.words = 100)

to

wordcloud::comparison.cloud(colors = c("red", "green"), max.words = 100)

如果在检查包(R CMD检查)时发生这种情况,请查看您的命名空间。

你可以通过在命名空间中添加以下语句来解决这个问题:

exportPattern("^[^\\\\.]")

这将导出所有不以点(".")开头的内容。这允许你有你的隐藏函数,从一个点开始:

.myHiddenFunction <- function(x) cat("my hidden function")