201

这是一个常见问题解答问题,因此请尽可能完整。答案是社区答案,因此如果您认为缺少某些内容,请随时进行编辑。

这个问题在 meta 上得到了讨论和批准。

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

Error: could not find function "some.function"

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

4

10 回答 10

138

您应该检查几件事:

  1. 您是否正确编写了函数的名称?名称区分大小写。
  2. 您是否安装了包含该功能的软件包?install.packages("thePackage")(这只需要做一次)
  3. 您是否将该包附加到工作区? require(thePackage)(并检查它的返回值)或library(thePackage)(每次开始新的 R 会话时都应该这样做)
  4. 您是否使用尚不存在此功能的旧 R 版本?
  5. 您是否使用不同版本的特定?这可能是任何一个方向:随着时间的推移添加和删除函数,并且您引用的代码可能需要比您安装的包的更新或旧版本。

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

  1. 如果您确定您安装并附加/加载了正确的包,请键入help.search("some.function")??some.function获取一个信息框,该框可以告诉您它包含在哪个包中。
  2. findgetAnywhere可用于定位功能。
  3. 如果您对包一无所知,可以按照此答案中的说明在包中findFn使用。sos
  4. RSiteSearch("some.function")或使用rdocumentationrseek搜索是查找函数的替代方法。

有时您需要使用旧版本的 R,但运行为新版本创建的代码。新添加的函数(例如 R 3.4.0 中的 hasName)将不会被找到。如果您使用较旧的 R 版本并想使用较新的功能,您可以使用包backports使此类功能可用。您还可以在 backports 的git 存储库中找到需要反向移植的函数列表。请记住,早于 R3.0.0 的 R 版本与为 R3.0.0 和更高版本构建的包不兼容。

于 2011-08-11T14:07:23.913 回答
29

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

例如(人为,我知道,但是):

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

首先,您不应该直接调用 S3 方法,但假设plot.prcomp实际上是包foo中的一些有用的内部函数。如果您知道自己在做什么,要调用这样的函数需要使用:::. 您还需要知道函数所在的命名空间。使用getAnywhere()我们发现该函数在包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 方法。但是正如我所说,如果您要调用的函数存在(例如,它可能是一个隐藏的实用函数),但在 a 中namespace,R 将报告它找不到该函数,除非您告诉它要查看哪个命名空间.

将其与以下内容进行比较: stats::plot.prcomp 上面的失败是因为虽然stats使用plot.prcomp,它没有从stats错误正确地告诉我们导出:

错误:'plot.prcomp' 不是从'namespace:stats' 导出的对象

这记录如下:

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

于 2011-08-11T14:38:34.137 回答
12

当计算机在我的控制之下时,我通常可以解决这个问题,但在使用网格时它更令人讨厌。当网格不是同质的时,并不是所有的库都可以安装,我的经验经常是因为没有安装依赖项而没有安装包。为了解决这个问题,我检查了以下内容:

  1. 是否安装了 Fortran?(查找“gfortran”。)这会影响 R 中的几个主要包。
  2. 是否安装了 Java?Java 类路径是否正确?
  3. 检查该软件包是否由管理员安装并且可供相应用户使用。有时用户会将软件包安装在错误的位置,或者在没有适当访问正确库的情况下运行。 .libPaths()是一个很好的检查。
  4. 检查lddR 的结果,以确保共享库
  5. 定期运行一个只加载所需的每个包并进行一些小测试的脚本是很好的。这会在工作流程中尽早发现包问题。这类似于构建测试或单元测试,只是它更像是一个冒烟测试,以确保非常基本的东西有效。
  6. 如果包可以存储在网络可访问的位置,是吗?如果他们不能,有没有办法确保跨机器的版本一致?(这可能看起来 OT,但正确的软件包安装包括正确版本的可用性。)
  7. 该软件包是否可用于给定的操作系统?不幸的是,并非所有软件包都可以跨平台使用。这又回到了第 5 步。如果可能,尝试通过切换到适当风格的包或在某些情况下关闭依赖项来找到处理不同操作系统的方法。

遇到这种情况很多,其中一些步骤变得相当常规。尽管#7 似乎是一个很好的起点,但它们是按照我使用它们的频率的大致顺序列出的。

于 2011-08-11T14:36:04.787 回答
7

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

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

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

这会导出不以点(“.”)开头的所有内容。这允许您拥有以点开头的隐藏功能:

.myHiddenFunction <- function(x) cat("my hidden function")
于 2012-05-08T01:22:02.417 回答
5

我有错误

错误:找不到函数some.function

在对我使用 RStudio 制作的包进行 R CMD 检查时发生。我发现添加

出口模式(“。”)

到 NAMESPACE 文件就可以了。作为旁注,我最初将 RStudio 配置为使用 ROxygen 来制作文档——并选择了 ROxygen 为我编写我的 NAMESPACE 文件的配置,这会不断擦除我的编辑。因此,在我的实例中,我从 Roxygen 配置中取消选中 NAMESPACE 并将 exportPattern(".") 添加到 NAMESPACE 以解决此错误。

于 2013-08-29T00:21:54.360 回答
5

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

Rcpp 功能:SEXP RcppFunction(arg1, arg2=0) {}
R 调用:
RcppFunction(0)引发错误
RcppFunction(0, 0)

于 2014-07-11T08:21:08.067 回答
2

Rdocumentation.org有一个非常方便的搜索功能 - 除其他外 - 可让您从 CRAN 上的所有包以及来自 Bioconductor 和 GitHub 的包中查找函数。

在此处输入图像描述

于 2015-09-04T12:37:34.747 回答
1

如果您正在使用,则parallelMap需要将自定义功能导出到从属作业,否则您会收到错误“找不到功能”。

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

parallelStart(mode = "<your mode here>", N, level = "<task.level>")
parallelExport("<myfun>", level = "<task.level>")
于 2016-07-02T12:16:46.947 回答
0

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

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

wordcloud::comparison.cloud(colors = c("red", "green"), max.words = 100)
于 2018-03-26T15:36:56.423 回答
-1

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

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

于 2016-11-14T04:41:03.103 回答