【问题标题】:Source dependent files源依赖文件
【发布时间】:2015-01-08 14:47:42
【问题描述】:

一个源文件如何以包加载功能的方式相互依赖,并且它们都可以工作。这是一个 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 尚未加载。有没有办法加载它们(不知道依赖关系的顺序),它们将在某些环境中可用并按定义工作?

【问题讨论】:

    标签: r


    【解决方案1】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 2011-08-24
      • 2011-12-26
      • 2012-11-04
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 2019-06-04
      • 1970-01-01
      相关资源
      最近更新 更多