Пусть R ищет файлы в каталоге библиотеки - PullRequest
6 голосов
/ 29 ноября 2010

Я использую R, на Linux. У меня есть набор функций, которые я часто использую, и которые я сохранил в разных файлах скриптов .r. Эти файлы находятся в ~ / r_lib /.

Я хотел бы включить эти файлы, не используя полное имя, а просто "file.r". В основном я смотрю ту же команду, что и -I в компиляторе c ++.

Есть ли способ установить файл включения из R в файле .Rprofile или .Renviron?

Спасибо

Ответы [ 4 ]

5 голосов
/ 29 ноября 2010

Вы можете использовать функцию sourceDir в разделе примеров ?source:

sourceDir <- function(path, trace = TRUE, ...) {
   for (nm in list.files(path, pattern = "\\.[RrSsQq]$")) {
      if(trace) cat(nm,":")           
      source(file.path(path, nm), ...)
      if(trace) cat("\n")
   }
}

И вы можете использовать sys.source, чтобы не загромождать вашу глобальную среду.

1 голос
/ 14 декабря 2011

Если вы установите для параметра chdir источника значение TRUE, то вызовы source во включенном файле будут относиться к его пути.Следовательно, вы можете позвонить:

source("~/r_lib/file.R",chdir=T)

Возможно, было бы лучше не иметь исходных вызовов в вашей "библиотеке" и не превращать ваш код в пакет, но иногда это удобно.

0 голосов
/ 29 ноября 2010

Написать свой source() упаковщик?

mySource <- function(script, path = "~/r_lib/", ...) {
    ## paste path+filename
    fname <- paste(path, script, sep = "")
    ## source the file
    source(fname, ...)
}

Вы можете заметить, что в вашем .Rprofile do будет загружаться каждый раз, когда вы запускаете R.

Если вы хотите загрузить все файлы R, вы можете легко расширить вышеперечисленное, чтобы сразу получать все файлы

mySource <- function(path = "~/r_lib/", ...) {
    ## list of files
    fnames <- list.files(path, pattern = "\\.[RrSsQq]$")
    ## add path
    fnames <- paste(path, fnames, sep = "")
    ## source the files
    lapply(fnames, source, ...)
    invisible()
}

На самом деле, вам бы лучше было запустить свой личный пакет и загрузить его.

0 голосов
/ 29 ноября 2010

Получить все файлы вашего каталога, в вашем случае

d <- list.files("~/r_lib/")

тогда вы можете загрузить их с помощью функции plyr пакета

library(plyr)  
l_ply(d, function(x) source(paste("~/r_lib/", x, sep = "")))

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

for (i in 1:length(d)) source(paste("~/r_lib/", d[[i]], sep = ""))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...