这是一个FAQ问题,所以请尽可能完整。答案是社区答案,如果您认为缺少某些内容,请随时编辑。
我正在使用R并尝试some.function
,但我收到以下错误消息:
Error: could not find function "some.function"
这个问题经常出现。当你在R中遇到这种类型的错误时,你怎么解决它?
答案 0 :(得分:111)
您应该检查一些事项:
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版本并希望使用较新的功能,则可以使用包backports来使这些功能可用。您还可以找到需要在git repo of backports上反向移植的功能列表。请记住,早于R3.0.0的R版本与为R3.0.0及更高版本构建的软件包不兼容。
答案 1 :(得分:27)
存在NAMESPACE时的另一个问题是,您正试图从包 foo 运行未导出的函数。
例如(设计,我知道,但是):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
首先,你不应该直接调用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>
所以我们现在可以直接使用:
来调用它> stats:::plot.prcomp(mod)
我以plot.prcomp
为例说明了目的。在正常使用中,您不应该像这样调用S3方法。但正如我所说,如果您要调用的函数存在(例如它可能是一个隐藏的实用函数),但是在namespace
中,R将报告除非您告诉它它找不到该函数要查找的命名空间。
将此与以下内容进行比较:
stats::plot.prcomp
上述操作失败是因为stats
使用plot.prcomp
时,stats
未导出,因为错误正确地告诉我们:
错误:'plot.prcomp'不是'namespace:stats'
中的导出对象
记录如下:
pkg :: name返回命名空间pkg中导出的变量名的值,而pkg ::: name返回内部变量名的值。
答案 2 :(得分:11)
当计算机在我的控制之下时,我通常可以解决这个问题,但在使用网格时更是麻烦。当网格不是同源的时,并不是所有的库都可以安装,而我的经验通常是没有安装软件包,因为没有安装依赖项。为解决这个问题,我查看以下内容:
.libPaths()
是一个很好的检查。ldd
结果,以确保共享库遇到这个问题后,其中一些步骤变得相当常规。虽然#7似乎是一个很好的起点,但它们按照我使用它们的频率的近似顺序列出。
答案 3 :(得分:5)
如果您在检查包裹时发生这种情况(R CMD检查),请查看您的NAMESPACE。
您可以通过将以下语句添加到NAMESPACE来解决此问题:
exportPattern("^[^\\\\.]")
这会导出所有不以点(“。”)开头的内容。这允许您拥有隐藏的功能,从点开始:
.myHiddenFunction <- function(x) cat("my hidden function")
答案 4 :(得分:4)
我有错误
错误:找不到函数
some.function
在使用RStudio对我正在制作的软件包进行R CMD检查时发生。我发现添加了
exportPattern( “”)
到NAMESPACE文件就可以了。作为旁注,我最初配置了RStudio来使用ROxygen来制作文档 - 并选择了ROxygen为我编写NAMESPACE文件的配置,这样就可以删除我的编辑内容。因此,在我的实例中,我从Roxygen配置中取消选中NAMESPACE,并将exportPattern(“。”)添加到NAMESPACE以解决此错误。
答案 5 :(得分:4)
如果缺少某些必需参数(即您没有提供足够的参数),即使函数名称有效,也会发生此错误。
我在一个Rcpp上下文中得到了这个,我用可选参数编写了一个C ++函数,并且没有在R中提供这些参数。看来C ++中的optionnal参数被R看作是强制性的。结果,R找不到正确名称的匹配函数,但参数数量不正确。
Rcpp功能:SEXP RcppFunction(arg1, arg2=0) {}
R电话:
RcppFunction(0)
提出错误
RcppFunction(0, 0)
没有
答案 6 :(得分:2)
Rdocumentation.org有一个非常方便的搜索功能,除了其他功能外,还可以让你从CRAN上的所有软件包以及Bioconductor和GitHub中的软件包中找到函数。
答案 7 :(得分:1)
如果您使用parallelMap
,则需要将自定义功能导出到从属作业,否则会出现错误&#34;无法找到功能&#34;。
如果在parallelStart
上设置了非缺失级别,则应将相同的参数传递给parallelExport
,否则会出现相同的错误。所以应严格遵守:
parallelStart(mode = "<your mode here>", N, level = "<task.level>")
parallelExport("<myfun>", level = "<task.level>")
答案 8 :(得分:0)
您可以通过名称间距:: 函数调用
来修复此错误comparison.cloud(colors = c("red", "green"), max.words = 100)
到
wordcloud::comparison.cloud(colors = c("red", "green"), max.words = 100)
答案 9 :(得分:-1)
我得到了同样的错误,我正在运行.99xxx版本,我检查了帮助菜单中的更新并将我的RStudio更新为1.0x,然后错误没来了
如此简单的解决方案,只需更新您的R Studio
即可