R 源相关文件

R 源相关文件,r,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) 这是有意义的,因为bar需要foo,但foo尚未加载。有没有一种方法可以加载它们(不知道依赖项的先后顺序)并

一个源文件如何在软件包加载函数和它们的工作方式上相互依赖。这里有一个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)

这是有意义的,因为
bar
需要
foo
,但foo尚未加载。有没有一种方法可以加载它们(不知道依赖项的先后顺序)并且它们可以在某些环境中使用并按定义工作?

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

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