Подход 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.