Jor*_*eys 167 error-handling r function r-faq
这是一个FAQ问题,所以请尽可能完整.答案是社区答案,如果您认为缺少某些内容,请随时编辑.
我正在使用R并尝试some.function但我收到以下错误消息:
Error: could not find function "some.function"
Run Code Online (Sandbox Code Playgroud)
这个问题经常出现.当你在R中遇到这种类型的错误时,你怎么解决它?
Jor*_*eys 116
你应该检查几件事:
install.packages("thePackage")(这只需要做一次)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版本并希望使用较新的功能,则可以使用程序包backport来使这些功能可用.您还可以找到需要在backports的git repo上反向移植的函数列表.请记住,早于R3.0.0的R版本与为R3.0.0及更高版本构建的软件包不兼容.
Rei*_*son 28
在存在NAMESPACE的情况下,另一个问题是你试图从包foo运行一个未导出的函数.
例如(人为,我知道,但是):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
Run Code Online (Sandbox Code Playgroud)
首先,你不应该直接调用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>
Run Code Online (Sandbox Code Playgroud)
所以我们现在可以直接调用它:
> stats:::plot.prcomp(mod)
Run Code Online (Sandbox Code Playgroud)
我plot.prcomp只是用一个例子来说明目的.在正常使用中,您不应该像这样调用S3方法.但正如我所说,如果您要调用的函数存在(例如它可能是隐藏的实用程序函数),但是在命名空间中,R将报告它无法找到该函数,除非您告诉它看起来哪个命名空间在.
Ite*_*tor 11
当计算机在我的控制之下时,我通常可以解决这个问题,但在使用网格时,这更令人讨厌.当网格不是同源的时,并不是所有的库都可以安装,而我的经验通常是没有安装软件包,因为没有安装依赖项.为了解决这个问题,我检查以下内容:
.libPaths()是一个很好的检查.lddR的结果,以确保共享库遇到这个问题后,其中一些步骤变得相当常规.尽管#7似乎是一个很好的起点,但它们按照我使用它们的频率的近似顺序列出.
小智 6
如果在检查包装时发生这种情况(R CMD检查),请查看您的NAMESPACE.
您可以通过将以下语句添加到NAMESPACE来解决此问题:
exportPattern("^[^\\\\.]")
Run Code Online (Sandbox Code Playgroud)
这会导出所有不以点(".")开头的内容.这允许您从点开始隐藏功能:
.myHiddenFunction <- function(x) cat("my hidden function")
Run Code Online (Sandbox Code Playgroud)
我有错误
错误:找不到函数
some.function
在对我使用 RStudio 制作的包进行 R CMD 检查时发生。我发现添加
出口模式(“。”)
到 NAMESPACE 文件就成功了。作为旁注,我最初将 RStudio 配置为使用 Roxygen 来制作文档——并选择了 Roxygen 为我编写我的 NAMESPACE 文件的配置,这会不断擦除我的编辑。因此,在我的实例中,我取消了 Roxygen 配置中的 NAMESPACE 并将 exportPattern(".") 添加到 NAMESPACE 以解决此错误。
如果缺少某些必需参数(即您没有提供足够的参数),即使函数名称有效,也会发生此错误。
我在 Rcpp 上下文中得到了这个,在那里我写了一个带有可选参数的 C++ 函数,并没有在 R 中提供这些参数。似乎来自 C++ 的可选参数被 R 视为强制性的。结果,R 找不到名称正确但参数数量不正确的匹配函数。
Rcpp 函数:SEXP RcppFunction(arg1, arg2=0) {}
R 调用:
RcppFunction(0)引发错误
RcppFunction(0, 0)不