【问题标题】:Make a user-created function in R在 R 中创建一个用户创建的函数
【发布时间】:2013-01-02 10:10:01
【问题描述】:

很抱歉,如果以前有人问过这个问题,但我找不到答案。

假设我在 R 中写了一个小函数

add2<-function(a){
return(a+2)
}

我将它作为 add2.R 保存在我的主目录(或任何目录)中。如何让 R 找到它??

> add2(4)
Error: could not find function "add2"

我知道我可以打开脚本,在控制台中复制/粘贴它,运行它,然后它就可以工作了。但是我如何让它内置,所以如果我打开和关闭 R,它仍然可以在我不复制和粘贴的情况下运行?

【问题讨论】:

  • 如果你总是想要这个功能,你可以在你的.Rprofilesource 的东西,或者将它放入一个包中并使用library
  • 只是稍微扩展 Justin 的评论,?Startup 的文档读起来有点密集,但它包含了如何使用 .RProfile 文件的要点。基本上,它“在当前目录或用户的主目录中搜索(按此顺序)。用户配置文件源到工作区。”。
  • windows 7 不允许我创建一个名为“.Rprofile”的文件。有什么建议吗?
  • 好吧,我是在命令行中完成的。移动 g.Rprofile .Rprofile 愚蠢的窗口......
  • 此外,在 R 中,您可以执行 file.create(".Rprofile") --- 即使在 Windows 上 =)。

标签: r function user-defined


【解决方案1】:

一个轻量级选项:

dump("add2", file="myFunction.R")

## Then in a subsequent R session
source("myFunction.R")

另一种选择:

save("add2", file="myFunction.Rdata")

## Then just double click on "myFunction.Rdata" to open  
## an R session with add2() already in it 

## You can also import the function to any other R session with
load("myFunction.Rdata")

在您准备好将函数打包到您自己的私有包中之前,将它们存储在组织良好的source()-ready 文本文件中(如上面的第一个示例)可能是最好的策略。有关经验丰富的用户如何将这种方法付诸实践的一些示例,请参阅 this highly up-voted SO question

【讨论】:

    【解决方案2】:

    在调用函数之前(例如在脚本的开头),您应该 source 包含您的用户定义函数的文件,即:

    source("add2.R") # this executes add2.R script loading add2 function
    

    基本上,source 函数执行作为参数传递的脚本中包含的代码。因此,如果文件只包含函数定义,它会将函数加载到内存中以供将来使用。

    【讨论】:

      【解决方案3】:

      如果你想自动启动它,那么你必须设置启动脚本,然后使用上面答案中列出的方法之一。

      /Library/Frameworks/R.framework/Versions/2.15/Resources/etc/ 是(对于 mac)Rprofile.site 的位置,必须对其进行充分编辑。

      我的版本是:

      .First <- function()
      { 
          dir='~/Desktop/Infobase/R/0_init/0_init.R'
          if(file.exists(dir))
          {
          source(dir, chdir = TRUE) 
          } else {cat("startup file is not found at:",dir)}
          cat("\nWelcome at", date(), "\n")
      }    
      
      .Last <- function()
      { 
      cat("\nGoodbye at ", date(), "\n")
      }
      

      请注意,在您获取了 1 个 R 脚本后,您无需再输入此文件。只需从您获取的文件中完成您需要的一切。在我的情况下,文件“0_init.R”不包含任何功能,它只包含其他脚本的加载。嗯,你有这个想法。

      另外,如果您这样做,我建议您将它们存储在新环境中。实际环境并不真正适合你自己的功能(如果你开发了一个包,它们会更好地实现,否则你会失去很多控制权)。

      使用“附加”、“分离”、“搜索”等......

      attach(FUN,name="af2tr")
      

      【讨论】:

        猜你喜欢
        • 2021-05-30
        • 2022-12-07
        • 2018-05-29
        • 2021-02-15
        • 2020-07-09
        • 1970-01-01
        • 1970-01-01
        • 2020-12-29
        • 1970-01-01
        相关资源
        最近更新 更多