提问人: 提问时间:8/11/2011 最后编辑:15 revs, 8 users 46%Joris Meys 更新时间:8/2/2023 访问量:589696
错误:找不到函数...在 R 中
Error: could not find function ... in R
问:
这是一个常见问题,所以请尽可能完整。答案是社区答案,因此如果您认为缺少某些内容,请随时编辑。
我正在使用 R 并尝试过,但收到以下错误消息:some.function
Error: could not find function "some.function"
这个问题经常出现。当您在 R 中遇到此类错误时,您该如何解决?
答:
您应该检查以下几点:
- 你的函数名称写对了吗?名称区分大小写。
- 是否安装了包含该函数的软件包? (这只需要做一次)
install.packages("thePackage")
- 您是否将该包附加到工作区? (并检查其返回值)或(每次启动新的 R 会话时都应执行此操作)
require(thePackage)
library(thePackage)
- 您是否正在使用尚不存在此函数的旧 R 版本?
- 您是否正在使用特定包的不同版本?这可能是在任一方向上:函数会随着时间的推移而添加和删除,并且您引用的代码可能需要比您安装的包更新或旧版本。
如果不确定该函数位于哪个包中,可以执行一些操作。
- 如果您确定安装并附加/加载了正确的包,请键入 或获取一个信息框,该框可以告诉您它包含在哪个包中。
help.search("some.function")
??some.function
find
也可用于定位功能。getAnywhere
- 如果您对软件包一无所知,可以按照本答案中的说明在软件包中使用。
findFn
sos
RSiteSearch("some.function")
或者使用 rdocumentation 或 rseek 进行搜索是查找函数的替代方法。
有时需要使用较旧版本的 R,但运行为较新版本创建的代码。届时将找不到新添加的函数(例如 R 3.4.0 中的 hasName)。如果使用较旧的 R 版本并希望使用较新的函数,则可以使用包向后移植来使此类函数可用。您还可以在向后移植的 git 存储库上找到需要向后移植的函数列表。请记住,早于 R3.0.0 的 R 版本与为 R3.0.0 及更高版本构建的包不兼容。
评论
hasName
utils
hasName
utils
https://www.rdocumentation.org/packages/utils/versions/3.4.3/topics/hasName
https://stat.ethz.ch/R-manual/R-devel/library/utils/html/hasName.html
blame
RSiteSearch("hasName")
当计算机在我的控制之下时,我通常可以解决这个问题,但在使用网格时,这更令人讨厌。当网格不是同构的时,并非所有库都可以安装,我的经验通常是,由于未安装依赖项而未安装包。为了解决这个问题,我检查了以下内容:
- 是否安装了 Fortran?(寻找“gfortran”。这会影响 R 中的几个主要包。
- 是否安装了 Java?Java 类路径是否正确?
- 检查该包是否由管理员安装并可供相应用户使用。有时,用户会在错误的位置安装软件包,或者在没有适当访问正确库的情况下运行。 是一个很好的检查。
.libPaths()
- 检查 R 的结果,以确保共享库
ldd
- 定期运行一个脚本是很好的,该脚本只加载所需的每个包并执行一些小测试。这样可以在工作流中尽早发现包问题。这类似于构建测试或单元测试,只是它更像是一个冒烟测试,以确保最基本的东西有效。
- 如果包可以存储在可通过网络访问的位置,是吗?如果不能,有没有办法确保机器之间的版本一致?(这似乎是 OT,但正确的软件包安装包括正确版本的可用性。
- 该软件包是否适用于给定的操作系统?不幸的是,并非所有软件包都可以跨平台使用。这又回到了第 5 步。如果可能,请尝试找到一种方法来处理不同的操作系统,方法是切换到包的适当风格,或者在某些情况下关闭依赖项。
在遇到过很多次这种情况之后,其中一些步骤变得相当常规。尽管 #7 似乎是一个很好的起点,但这些是按照我使用它们的频率的大致顺序列出的。
评论
另一个问题是,在存在 NAMESPACE 的情况下,您正在尝试从包 foo 运行未导出的函数。
例如(人为的,我知道,但是):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
首先,您不应该直接调用 S3 方法,但让我们假设实际上是包 foo 中一些有用的内部函数。如果您知道自己在做什么,则要调用此类函数需要使用 。您还需要知道在其中找到函数的命名空间。使用时,我们发现该函数在包统计信息中:plot.prcomp
:::
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)
我只是举个例子来说明这个目的。在正常使用中,您不应该像这样调用 S3 方法。但正如我所说,如果你要调用的函数存在(例如,它可能是一个隐藏的实用程序函数),但位于 ,R 将报告它找不到该函数,除非你告诉它要查看哪个命名空间。plot.prcomp
namespace
将此与以下内容进行比较:上面失败了,因为在使用 时,它不会从错误正确告诉我们的那样导出:stats::plot.prcomp
stats
plot.prcomp
stats
错误:“plot.prcomp”不是从“namespace:stats”导出的对象
具体记录如下:
pkg::name 返回命名空间 pkg 中导出的变量 name 的值,而 pkg:::name 返回内部变量 name 的值。
评论
could not find function "anova.lm"
stats:::anova.lm()
:::
::
::
:::
plot.prcomp()
:::
如果在检查包(R CMD 检查)时发生这种情况,请查看 NAMESPACE。
您可以通过向 NAMESPACE 添加以下语句来解决此问题:
exportPattern("^[^\\\\.]")
这将导出不以点 (“.”) 开头的所有内容。这允许您拥有隐藏的功能,从一个点开始:
.myHiddenFunction <- function(x) cat("my hidden function")
评论
我遇到了错误
错误:找不到函数
some.function
对我使用 RStudio 制作的包进行 R CMD 检查时发生。我发现添加
exportPattern(“.”)
到 NAMESPACE 文件就成功了。顺便说一句,我最初将 RStudio 配置为使用 ROxygen 来制作文档——并选择了 ROxygen 为我编写 NAMESPACE 文件的配置,这会不断删除我的编辑。因此,在我的实例中,我从 Roxygen 配置中取消了 NAMESPACE,并将 exportPattern(“.”) 添加到 NAMESPACE 以解决此错误。
评论
如果缺少某些必需参数(即您没有提供足够的参数),即使函数的名称有效,也可能发生此错误。
我在 Rcpp 上下文中得到了这一点,在那里我编写了一个带有选项参数的 C++ 函数,并且没有在 R 中提供这些参数。R 似乎认为 C++ 中的选项参数是强制性的。因此,R 找不到正确名称的匹配函数,但找不到错误数量的参数。
Rcpp 函数:R 调用:
引发错误
不SEXP RcppFunction(arg1, arg2=0) {}
RcppFunction(0)
RcppFunction(0, 0)
Rdocumentation.org 有一个非常方便的搜索功能,除其他外,还可以从CRAN上的所有软件包以及Bioconductor和GitHub的软件包中查找功能。
评论
如果您正在使用,则需要将自定义函数导出到从属作业,否则您会收到错误“找不到函数”。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)
自
wordcloud::comparison.cloud(colors = c("red", "green"), max.words = 100)
评论
找不到的函数可能不是命名的函数。我在使用 R/c.R 模块中的函数时遇到了此错误,该函数是在 R/a.R 模块中定义的,该模块以前在 R/b.R 中成功使用过,文件按 a、b、c 顺序提供。我传递的参数之一是全局参数。反过来,它是由一个函数设置的。该函数具有依赖项,而依赖项又存在错误。解决依赖项中的错误(也在 R/a.R 中定义)解决了该错误。这是惰性计算导致难以调试情况的众多情况之一。因此,如果错误看起来毫无意义,请仔细查看参数及其设置方式。
评论
R
q()