如何自动加载功能

时间:2016-11-15 07:12:34

标签: r

我在R中创建了一些函数,每当我需要这些函数时,我都需要重新创建它。请建议我的方式和步骤,以便我可以直接在R的任何会话中使用这些功能而无需重新创建它们。

2 个答案:

答案 0 :(得分:3)

虽然Carl的回答是可以接受的,但我个人认为这正是您应该打包函数并将它们称为库的情况。

有很好的理由这样做:

  • 文档(重点!)
  • 测试
  • 轻松加载(library(mypackage)
  • 易于跨系统共享和移植
  • 易于在报告中使用(Rmd / knitr)
  • 减少重复的可能性
  • 学习R包系统将是您工具箱的重要组成部分,并且适当组织代码的其他好处将变得明显。

答案 1 :(得分:0)

我在所有会话中都需要一系列功能。诀窍是将它们添加到.First文件中,以便它们全部来源于每个会话。

帮助函数找到你的第一个文件

find.first <- function(edit = FALSE, show_lib = TRUE){

  candidates <- c(Sys.getenv("R_PROFILE"),
                  file.path(Sys.getenv("R_HOME"), "etc", "Rprofile.site"),
                  Sys.getenv("R_PROFILE_USER"),
                  file.path(getwd(), ".Rprofile")
                  )

  first_hit <- Filter(file.exists, candidates)

  if(show_lib & !edit){
    return(first_hit)
  }else {
    file.edit(first_hit)
  }
}

假设您在任何地方使用的脚本都在'/ mystuff / R'

# Pop open the first Rprofile file.
find.first(edit = TRUE)

你会看到这样的事情:

##Emacs please make this -*- R -*-
## empty Rprofile.site for R on Debian
##
## Copyright (C) 2008 Dirk Eddelbuettel and GPL'ed
##
## see help(Startup) for documentation on ~/.Rprofile and Rprofile.site

# ## Example of .Rprofile
# options(width=65, digits=5)
# options(show.signif.stars=FALSE)
# setHook(packageEvent("grDevices", "onLoad"),
#         function(...) grDevices::ps.options(horizontal=FALSE))
# set.seed(1234)
#.First <- function(){}
#
#

将功能编辑为:

.First <- function(){
  all_my_r <- list.files('/mystuff/R', full.names = T,
                         recursive = T, pattern = ".R$" )
    lapply(all_my_r, function(i){
     tryCatch(source(i), error = function(e)NULL)
    })

}

保存文件。然后重启会话。