如何在程序包加载函数的方式中依赖于彼此的源文件,它们都可以工作。这是一个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还没有加载。有没有办法加载它们(不知道依赖项排序时间),它们将在某些环境中可用并按照定义工作?
答案 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)