R: pozyskiwanie plików przy użyciu ścieżki względnej
Pozyskiwanie plików przy użyciu ścieżki względnej jest przydatne w przypadku dużych baz kodu. Inne języki programowania mają dobrze zdefiniowane mechanizmy pozyskiwania plików przy użyciu ścieżki względnej do katalogu, do którego pochodzi plik. Przykładem jest Rubyrequire_relative
. Jaki jest dobry sposób na wdrożenie względnego pozyskiwania ścieżek w R?
Poniżej przedstawiam to, co razem złożyłem, korzystając z różnych przepisów i postów na forum R. To działało dobrze dla mnie, jeśli chodzi o prosty rozwój, ale nie jest solidne. Na przykład zrywa się, gdy pliki są ładowane przeztestthat
w szczególności bibliotekiauto_test()
. rscript_stack()
zwracacharacter(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), ...)
}
Czy wiesz coś lepszegosource_relative
realizacja?