错误:找不到函数。。。在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及更高版本构建的软件包不兼容。

    您应该检查以下几点:

  • 你写的函数名正确吗?名称区分大小写
  • 您是否安装了包含该功能的软件包<代码>安装.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可能看起来是一个很好的起点,但它们是按照我使用频率的大致顺序列出的。

    当计算机在我的控制下时,我通常可以解决这个问题,但使用网格时更麻烦。当网格不是同质的时候,并不是所有的库都可以安装,我的经验经常是这样的
    > mod <- prcomp(USArrests, scale = TRUE)
    > plot.prcomp(mod)
    Error: could not find function "plot.prcomp"
    
    > 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)
    
    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)