2015-01-08 6 views
0

Как могут быть файлы исходного кода, которые зависят друг от друга в том, как пакеты загружают функции, и все они работают. Вот 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

Возможность, но кажется, что есть лучший способ:

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) 
+0

работает только тогда, когда каждый объект находится в отдельном файле –