【问题标题】:Startup script in Rprofile throws 'function not found' errorsRprofile 中的启动脚本引发“未找到函数”错误
【发布时间】:2014-06-17 07:36:01
【问题描述】:

我希望 R 在初始化时加载某个文件,所以我很自然地在我的 Rprofile 中添加了一个source 命令,所以:

  .First <- function()
   {
         cat("\n   Welcome to R MotherFnorder!!!\n\n")
         setwd("/home/username/Code/R/")
       source("/home/username/Code/R/file.R")
   }

但是现在当我启动R 时,它会为runifrnorm 等默认函数抛出“找不到函数”错误。当我手动将相同的文件加载到工作区时,我没有收到任何错误。

【问题讨论】:

  • 这是因为您尝试使用尚未在 R 中导入的函数,因为您的脚本首先运行...
  • 啊哈.....这有点道理。那么在会话开始时是否还有另一个函数在其他所有内容之后运行?

标签: r rprofile


【解决方案1】:

您不需要(或者,真的,想要)创建 .First 。如果您将这些行放入您的.Rprofile,它们将执行得很好。 -- 附带条件@Pascal 指出,在file.R 中调用的任何函数都必须首先加载其库。所以, 靠近你的.Rprofile 底部,放

library(whatever_packages_needed)
cat("\n   Welcome to R MotherFnorder!!!\n\n")
setwd("/home/username/Code/R/")
source("/home/username/Code/R/file.R")

编辑:我无法重现您的问题。我将这些行添加到 .Rprofile 的末尾:

#testing SO problem with libloading
library(stats)
runif(10)

控制台返回十个不错的数字。

【讨论】:

  • 感谢您的回答,但很遗憾您的解决方案不起作用。我得到完全相同的错误。 {我已经有在文件头中调用的文件中使用的库;不管怎样,我在.Rprofile 中再次添加它们只是为了检查,它没有任何区别。}
  • 我尝试了更新注释中提到的代码,同样的代码也适用于我。看来这个问题特别是在这种情况下调用source() 函数的方式存在问题。
  • 但事实证明问题是我的文件标题中根本没有library(stats)。我猜这些函数是 R 原生的。感谢您的帮助!
【解决方案2】:

错误的原因是当.First() 包还没有加载。

虽然runifrnorm 看起来像是默认函数,但它们实际上是stats 包的一部分。因此,它们在调用 .First() 时不可用(除非您专门从 .First 中调用该包)

...这也解释了这一点:

当我手动将同一个文件加载到工作区时,我没有收到任何错误。

.First() 之后之前你有机会手动运行任何东西,默认包是附加的。因此,当您手动调用它时,它可用于您的功能。


解决方案是创建一个名为 "~/.Rprofile" 的文件(如果它不存在),并将您当前在 .First() 中的行放入其中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多