让R在库目录中查找文件

时间:2010-11-29 14:23:19

标签: linux r

我在Linux上使用R。 我有一个经常使用的函数集,并且我保存在不同的.r脚本文件中。那些文件在〜/ r_lib /.

我想包含这些文件,而不必使用完全限定名称,只需“file.r”。基本上我在c ++编译器中看起来与-I相同的命令。

我有办法在.Rprofile或.Renviron文件中设置来自R的包含文件吗?

由于

4 个答案:

答案 0 :(得分:5)

您可以使用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 :(得分:1)

如果您将来源的chdir参数设置为TRUE,那么所包含文件中的source次调用将相对于其路径。因此,您可以致电:

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

最好不要在“库”中进行源代码调用并将代码放入包中,但有时这很方便。

答案 2 :(得分:0)

获取目录中的所有文件

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 = ""))

答案 3 :(得分:0)

编写自己的source()包装器?

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

您可以坚持在.Rprofile每次启动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()
}

实际上,你最好开始自己的私人包并加载它。