错误:找不到函数。。。在R

错误:找不到函数。。。在R,r,function,error-handling,r-faq,R,Function,Error Handling,R Faq,这是一个常见问题,请尽可能完整。答案是社区答案,因此,如果您认为缺少某些内容,请随意编辑 我正在使用R并尝试了一些.function,但收到以下错误消息: Error: could not find function "some.function" 这个问题经常出现。当您在R中遇到此类错误时,如何解决它?有几件事您应该检查: 你写的函数名正确吗?名称区分大小写 您是否安装了包含该功能的软件包安装.package(“thePackage”)(只需执行一次) 您是否将该软件包

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

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

Error: could not find function "some.function"

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

有几件事您应该检查:

  • 你写的函数名正确吗?名称区分大小写
  • 您是否安装了包含该功能的软件包<代码>安装.package(“thePackage”)(只需执行一次)
  • 您是否将该软件包附加到工作区?
    require(软件包)
    (并检查其返回值)或
    library(软件包)
    (应在每次启动新的R会话时执行此操作)
  • 您使用的是一个旧的R版本,而这个功能还不存在吗
  • 如果您不确定该函数位于哪个包中,您可以做一些事情

  • 如果您确定安装并附加/加载了正确的软件包,请键入
    help.search(“some.function”)
    ?some.function
    ,以获得一个信息框,告诉您它包含在哪个软件包中
  • find
    getAnywhere
    也可用于定位函数
  • 如果您对软件包没有任何线索,可以在
    sos
    软件包中使用
    findFn
    ,如中所述
  • RSiteSearch(“some.function”)
    或使用或搜索是查找函数的替代方法

  • 有时您需要使用旧版本的R,但运行为新版本创建的代码。新添加的函数(如R3.4.0中的hasName)将找不到。如果您使用较旧的R版本,并且希望使用较新的函数,则可以使用该软件包使这些函数可用。您还可以在上找到需要进行后端口的函数列表。请记住,R3.0.0之前的R版本与为R3.0.0及更高版本构建的软件包不兼容。

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

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

  • 在经历了相当一段时间后,其中一些步骤变得相当常规。尽管#7似乎是一个很好的起点,但它们是按照我使用频率的大致顺序列出的。

    另一个问题是,在存在名称空间的情况下,您试图从packagefoo运行未报告的函数

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

    因此,我们现在可以使用以下命令直接调用它:

    > stats:::plot.prcomp(mod)
    
    我使用了
    plot.prcomp
    作为示例来说明目的。在正常使用中,不应该像这样调用S3方法。但正如我所说的,如果您要调用的函数存在(例如,它可能是一个隐藏的实用程序函数),但位于
    命名空间中,R将报告它无法找到该函数,除非您告诉它要在哪个命名空间中查找

    将其与以下内容进行比较:
    stats::plot.prcomp
    上述操作失败是因为
    stats
    使用
    plot.prcomp
    ,但它不是从
    stats
    导出的,因为错误正确地告诉我们:

    错误:“plot.prcomp”不是从“命名空间:stats”导出的对象

    记录如下:

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


    如果在检查包(R CMD check)时发生这种情况,请查看名称空间

    可以通过向命名空间添加以下语句来解决此问题:

    exportPattern("^[^\\\\.]")
    
    这将导出所有不以点(“.”)开头的内容。这允许您拥有隐藏的函数,从一个点开始:

    .myHiddenFunction <- function(x) cat("my hidden function")
    
    .myHiddenFunction我出现了错误

    错误:找不到函数
    some.function

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

    exportPattern(“.”)

    对名称空间文件执行此操作。作为旁注,我最初将RStudio配置为使用ROxygen制作文档,并选择ROxygen为我编写名称空间文件的配置,这会不断删除我的编辑。因此,在我的例子中,我取消选中
    exportPattern("^[^\\\\.]")
    
    .myHiddenFunction <- function(x) cat("my hidden function")
    
    parallelStart(mode = "<your mode here>", N, level = "<task.level>")
    parallelExport("<myfun>", level = "<task.level>")
    
    comparison.cloud(colors = c("red", "green"), max.words = 100)
    
    wordcloud::comparison.cloud(colors = c("red", "green"), max.words = 100)