2016-11-15 3 views
1

Я создал некоторые функции в R и всякий раз, когда мне нужна какая-либо из этих функций, мне нужно заново создать это. Пожалуйста, предложите мне способ и шаги, чтобы я мог напрямую использовать эти функции в любой сессии R без их воссоздания.Как автоматически загрузить функцию

+0

Вы используете источник()? source() загружает функцию, если путь правильный –

+0

и что вы имеете в виду, воссоздавая их каждый раз? –

+0

http://www.statmethods.net/interface/customizing.html – Roland

ответ

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) 
    } 
} 

Say скрипты, которые вы используете везде в '/ 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) 
    }) 

} 

Сохраните файл. Затем перезапустите сеанс.

+0

Ох ... и в случае, если это не было очевидно, не комментируйте # .First –

3

Хотя ответ Карла приемлем, я лично считаю, что это именно та ситуация, когда вы должны упаковывать свои функции и просто называть их библиотекой.

Есть очень веские причины, чтобы сделать это: (! С акцентом)

  • Документация
  • Тесты
  • Легкая загрузка (library(mypackage))
  • Легко поделиться и переносимыми между системами
  • Простота использования в отчетах (Rmd/knitr)
  • Уменьшает потенциал дублирования
  • Изучение системы пакетов R станет важной частью вашего инструментария, и другие преимущества организации вашего кода будут очевидны.
+0

Я поддерживаю это сообщение сильно. –

Смежные вопросы