源依赖文件

时间:2015-01-08 06:11:44

标签: r

如何在程序包加载函数的方式中依赖于彼此的源文件,它们都可以工作。这是一个MWE:

dir.create("temp")
cat("bar <- foo + 1", file="temp/bar.R")
cat("foo <- 3", file="temp/foo.R")

lapply(file.path("temp", list.files("temp")), source)

这导致:

## > lapply(file.path("temp", list.files("temp")), source)
## Error in eval(expr, envir, enclos) : object 'foo' not found

这是有道理的,因为bar需要foo但foo还没有加载。有没有办法加载它们(不知道依赖项排序时间),它们将在某些环境中可用并按照定义工作?

1 个答案:

答案 0 :(得分:0)

可能性,但似乎有更好的方法:

fls <- file.path("temp", dir("temp"))
m <- rep(TRUE, length(fls))
env <- new.env(parent = globalenv())

while (sum(m) > 0) {
    output <- lapply(fls, function(x){
        try(sys.source(x, envir = env, keep.source = FALSE), TRUE)
    })
    m[sapply(output, is.null)] <- FALSE
}

ls(env)