R: terceirização de arquivos usando um caminho relativo
A obtenção de arquivos usando um caminho relativo é útil ao lidar com grandes bases de código. Outras linguagens de programação possuem mecanismos bem definidos para o fornecimento de arquivos usando um caminho relativo ao diretório do arquivo que está sendo originado. Um exemplo é o Rubyrequire_relative
. O que é uma boa maneira de implementar o fornecimento de caminho relativo em R?
Abaixo está o que eu reuni um tempo atrás usando várias receitas e posts do fórum R. Funcionou bem para mim para o desenvolvimento direto, mas não é robusto. Por exemplo, ele quebra quando os arquivos são carregados viatestthat
biblioteca, especificamenteauto_test()
. rscript_stack()
devolvecharacter(0)
.
# Returns the stack of RScript files
rscript_stack <- function() {
Filter(Negate(is.null), lapply(sys.frames(), function(x) x$ofile))
}
# Returns the current RScript file path
rscript_current <- function() {
stack <- rscript_stack()
r <- as.character(stack[length(stack)])
first_char <- substring(r, 1, 1)
if (first_char != '~' && first_char != .Platform$file.sep) {
r <- file.path(getwd(), r)
}
r
}
# Sources relative to the current script
source_relative <- function(relative_path, ...) {
source(file.path(dirname(rscript_current()), relative_path), ...)
}
Você conhece uma melhorsource_relative
implementação?