这是一个常见问题,所以请尽可能完整。答案是一个社区答案,所以如果您认为遗漏了什么,请随意编辑。 这个问题在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)没有

其他回答

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

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

有几件事你应该检查:

Did you write the name of your function correctly? Names are case sensitive. Did you install the package that contains the function? install.packages("thePackage") (this only needs to be done once) Did you attach that package to the workspace ? require(thePackage) (and check its return value) or library(thePackage) (this should be done every time you start a new R session) Are you using an older R version where this function didn't exist yet? Are you using a different version of the specific package? This could be in either direction: functions are added and removed over time, and it's possible the code you're referencing is expecting a newer or older version of the package than what you have installed.

如果您不确定该函数位于哪个包中,您可以做一些事情。

如果你确定你安装并加载了正确的包,输入help.search("some.function")或??some。函数获取一个信息框,该信息框可以告诉您它包含在哪个包中。 find和getAnywhere也可以用来定位函数。 如果您对该包没有任何线索,您可以在此答案中解释的sos包中使用finfn。 RSiteSearch("some.function")或使用rdocumentation或rseek进行搜索是查找函数的替代方法。

有时您需要使用旧版本的R,但运行为新版本创建的代码。新添加的函数(如R 3.4.0中的hasName)将不会被发现。如果您使用较旧的R版本,并希望使用较新的函数,则可以使用包的反向端口来提供这些函数。您还可以在backports的git repo上找到需要反向移植的函数列表。请记住,R3.0.0之前的R版本与为R3.0.0及更高版本构建的包不兼容。

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

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

Rdocumentation.org有一个非常方便的搜索功能,它可以让你从CRAN上的所有包中,以及从Bioconductor和GitHub上的包中找到函数。

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

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

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