Подход Steamer25 работает, но только если в пути нет пробелов. На macOS по крайней мере cmdArgs[match]
возвращает что-то вроде /base/some~+~dir~+~with~+~whitespace/
для /base/some\ dir\ with\ whitespace/
.
Я работал вокруг этого, заменив «~ + ~» простым пробелом перед его возвратом.
thisFile <- function() {
cmdArgs <- commandArgs(trailingOnly = FALSE)
needle <- "--file="
match <- grep(needle, cmdArgs)
if (length(match) > 0) {
# Rscript
path <- cmdArgs[match]
path <- gsub("\\~\\+\\~", " ", path)
return(normalizePath(sub(needle, "", path)))
} else {
# 'source'd via R console
return(normalizePath(sys.frames()[[1]]$ofile))
}
}
Очевидно, вы все равно можете расширить блокировку else, как это сделал aprstar.