错误:无法findfunction…在R

我使用R和尝试some.function但我得到这个错误消息:

 Error: could not find function `some.function` 

这个问题很常见。 当你得到这个error: could not find function在R中error: could not find function ,你怎么解决它?

预先感谢您的帮助。

这是一个常见问题,所以请尽可能完整。 答案是一个社区的答案,所以随时编辑,如果你觉得缺less一些东西。

这个问题在meta上被批准: https : //meta.stackexchange.com/questions/101892/community-wiki-with-common-error-messages-allowed

有几件事你应该检查:

  1. 你写了你的函数的名字是否正确? 名称区分大小写。
  2. 你有没有安装包含该function的软件包? install.packages("thePackage") (这只需要做一次)
  3. 你把那个软件包加到了工作区吗? require(thePackage)library(thePackage) (这应该在每次开始新的R会话时完成)

如果您不确定该函数位于哪个包中,则可以执行一些操作。

  1. 如果你确定你已经安装并加载了正确的软件包,请inputhelp.search("some.function")??some.function以获得一个信息框,告诉你它包含了哪个软件包。
  2. findgetAnywhere也可以用来定位函数。
  3. 如果你对这个软件包findFn ,你可以按照这个答案中的说明在sos软件包中使用findFn
  4. RSiteSearch("some.function")或用rseeksearch是find函数的替代方法。

在NAMESPACE的情况下,另一个问题是你正试图从包foo运行一个未导出的函数。

比如(做作,我知道,但是):

 > mod <- prcomp(USArrests, scale = TRUE) > plot.prcomp(mod) Error: could not find function "plot.prcomp" 

首先,你不应该直接调用S3方法,但是让我们假设plot.prcomp实际上是包foo中的一些有用的内部函数。 要调用这样的函数,如果你知道你在做什么需要使用::: 。 您还需要知道该函数的名称空间。 使用getAnywhere()我们发现这个函数在package stats中

 > 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) 

我只是以plot.prcomp为例来说明目的。 在正常使用中,您不应该调用像这样的S3方法。 但正如我所说,如果你想要调用的函数存在(例如它可能是一个隐藏的实用函数),但是在一个命名空间中,R会报告它找不到该函数,除非你告诉它看哪个命名空间在。

我通常可以解决这个问题,当一台计算机在我的控制之下,但使用网格时更麻烦。 当一个网格不一致的时候,并不是所有的库都可以安装,而我的经验往往是没有安装一个包,因为没有安装依赖。 为了解决这个问题,我检查以下内容:

  1. 是否安装了Fortran? (寻找'gfortran')这影响了R中的几个主要软件包。
  2. 是否安装了Java? Java类path是否正确?
  3. 检查该软件包是否由pipe理员安装并可供相应用户使用。 有时用户会在错误的地方安装软件包,或者没有适当的权限访问正确的库。 .libPaths()是一个很好的检查。
  4. 检查R的ldd结果,以确定共享库
  5. 定期运行一个只加载所需软件包并做一些小testing的脚本是很好的。 这会在工作stream程中尽早捕获包裹问题。 这类似于构buildtesting或unit testing,除了它更像是一个烟雾testing,以确保非常基本的东西工作。
  6. 如果包可以存储在networking可访问的位置,是吗? 如果他们不能,有没有一种方法来确保机器上的一致版本? (这看起来可能是OT,但正确的软件包安装包括正确版本的可用性。)
  7. 该软件包是否可用于给定的操作系统? 不幸的是,并不是所有的软件包都可以跨平 这可以回到步骤5.如果可能的话,尝试find一种方法来处理不同的操作系统,方法是在某些情况下切换到合适的软件包或closures依赖项。

遇到这一点,其中一些步骤变得相当常规。 虽然#7看起来可能是一个很好的起点,但是这些是按照我使用它们的频率的大概顺序列出的。

如果在检查包裹时发生这种情况(R CMD检查),请查看您的NAMESPACE。

您可以通过将以下语句添加到NAMESPACE中来解决此问题:

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

这会导出所有不以点开头的内容(“。”)。 这可以让你有一个隐藏的function,从一个点开始:

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

我有错误

错误:找不到函数some.function

发生在R CMD检查我正在用RStudio做的一个包时。 我发现添加

exportPattern( “”)

到NAMESPACE文件做了诀窍。 作为一个旁注,我最初configurationRStudio使用ROxygen来创build文档 – 并select了configuration,ROxygen会为我写NAMESPACE文件,这个文件一直在删除我的编辑。 所以,在我的例子中,我从Roxygenconfiguration中取消选中了NAMESPACE,并将exportPattern(“。”)添加到NAMESPACE中来解决这个错误。

如果某些强制参数丢失(即没有提供足够的参数),即使该函数的名称是有效的,也会发生此错误。
我在一个Rcpp上下文中得到了这个,在那里我写了一个带有optionnal参数的C ++函数,并没有在R中提供这些参数。看来,来自C ++的选项参数被R看作是强制的。结果,R找不到正确名称的匹配函数,但参数的数量不正确。

Rcpp函数: SEXP RcppFunction(arg1, arg2=0) {}
R电话:
RcppFunction(0)引发错误
RcppFunction(0, 0)

Rdocumentation.org有一个非常方便的searchfunction,可以让您从CRAN上的所有软件包,以及来自Bioconductor和GitHub的软件包中查找function。

在这里输入图像描述

如果使用的是parallelMap ,则需要将自定义函数导出到从属作业,否则会出现“找不到函数”错误。

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

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

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

如此简单的解决scheme,只需更新您的R Studio