这是一个常见问题,请尽可能完整。答案是社区答案,因此,如果您认为缺少某些内容,请随时进行编辑。
我正在使用R并尝试过,some.function
但是出现以下错误消息:
Error: could not find function "some.function"
这个问题经常出现。当您在R中遇到此类错误时,如何解决呢?
这是一个常见问题,请尽可能完整。答案是社区答案,因此,如果您认为缺少某些内容,请随时进行编辑。
我正在使用R并尝试过,some.function
但是出现以下错误消息:
Error: could not find function "some.function"
这个问题经常出现。当您在R中遇到此类错误时,如何解决呢?
Answers:
您应该检查以下几件事:
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的git repo上找到需要反向移植的功能列表。请记住,早于R3.0.0的R版本与为R3.0.0和更高版本构建的软件包不兼容。
hasName
函数utils
。但是,我使用的是3.3.1,hasName
直到3.4.0才引入。由于您不能utils
作为独立库进行更新,因此R / R Studio说我没有要更新的库。
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
说“中的R 3.4.0推出的”我最终通过GitHub的回购协议,并期待在浏览计算出来的blame
对utils的/ R / hasName.R和底座/ R / match.R
RSiteSearch("hasName")
并获得了相同的信息。这就是我几年前在此答案中添加的原因。知道这是一个有用的技巧;-)
在存在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方法。但是正如我所说,如果要调用的函数存在(例如,它可能是隐藏的实用程序函数),但是在中namespace
,R将报告找不到函数,除非您告诉它要查找的名称空间。 。
将此与以下内容进行比较:
stats::plot.prcomp
上面的操作失败,因为在stats
使用时plot.prcomp
,stats
由于错误正确地告诉了我们,它不会从中导出:
错误:“ plot.prcomp”不是从“ namespace:stats”导出的对象
记录如下:
pkg :: name返回名称空间pkg中导出的变量名称的值,而pkg ::: name返回内部变量名称的值。
could not find function "anova.lm"
...固定调用stats:::anova.lm()
,而不是
:::
却被称为设计错误,因此::
是首选。无法轻易找到参考。
::
和:::
是不同的,你的编辑不工作!该plot.prcomp()
函数不是从stats名称空间导出的,因此您需要使用:::
。
我通常可以在计算机控制下解决此问题,但是在使用网格时更麻烦。当网格不是同质的时,可能不会安装所有库,而我的经验常常是未安装软件包,因为未安装依赖项。为了解决这个问题,我检查了以下内容:
.libPaths()
是一个很好的检查。ldd
R的结果,以确保有关共享库遇到很多问题后,其中一些步骤变得相当常规。尽管#7似乎是一个很好的起点,但它们以我使用它们的频率的大约顺序列出。
如果在检查包裹(R CMD检查)时发生这种情况,请看一下您的名字空间。
您可以通过在NAMESPACE中添加以下语句来解决此问题:
exportPattern("^[^\\\\.]")
这将导出所有不以点(“。”)开头的内容。这使您可以从点开始拥有隐藏功能:
.myHiddenFunction <- function(x) cat("my hidden function")
我有错误
错误:找不到功能
some.function
对我使用RStudio制作的软件包进行R CMD检查时发生。我发现添加
exportPattern(“。”)
到NAMESPACE文件中就可以了。附带说明,我最初配置RStudio使用ROxygen来制作文档-并选择了ROxygen将为我编写我的NAMESPACE文件的配置,该配置会不断删除我的编辑内容。因此,在我的实例中,我未选中Roxygen配置中的NAMESPACE,并向NAMESPACE添加了exportPattern(“。”)以解决此错误。
Rdocumentation.org具有非常方便的搜索功能,除其他功能外,它使您可以从CRAN上的所有软件包以及Bioconductor和GitHub的软件包中找到函数。
您可以通过名称间距::函数调用来解决此错误
comparison.cloud(colors = c("red", "green"), max.words = 100)
至
wordcloud::comparison.cloud(colors = c("red", "green"), max.words = 100)
我得到了同样的错误,我正在运行.99xxx版本,我从帮助菜单中检查了更新并将我的RStudio更新为1.0x,然后没有出现错误
如此简单的解决方案,只需更新您的R Studio