Вы можете использовать commandArgs
функцию, чтобы получить все опции, которые были переданы Rscript фактическому интерпретатору R, и найти их --file=
. Если ваш скрипт был запущен с пути или если он был запущен с полным путем, то script.name
нижеприведенное будет начинаться с '/'
. В противном случае оно должно быть относительноcwd
и вы можете объединить два пути, чтобы получить полный путь.
Редактировать: звучит так, как будто вам нужно только script.name
вышеперечисленное и удалить последний компонент пути. Я удалил ненужный cwd()
образец, очистил основной скрипт и разместил свой other.R
. Просто сохраните этот скрипт и other.R
скрипт в той же директории, в которой chmod +x
они находятся, и запустите основной скрипт.
main.R :
#!/usr/bin/env Rscript
initial.options <- commandArgs(trailingOnly = FALSE)
file.arg.name <- "--file="
script.name <- sub(file.arg.name, "", initial.options[grep(file.arg.name, initial.options)])
script.basename <- dirname(script.name)
other.name <- file.path(script.basename, "other.R")
print(paste("Sourcing",other.name,"from",script.name))
source(other.name)
другое.Р :
print("hello")
вывод :
burner@firefighter:~$ main.R
[1] "Sourcing /home/burner/bin/other.R from /home/burner/bin/main.R"
[1] "hello"
burner@firefighter:~$ bin/main.R
[1] "Sourcing bin/other.R from bin/main.R"
[1] "hello"
burner@firefighter:~$ cd bin
burner@firefighter:~/bin$ main.R
[1] "Sourcing ./other.R from ./main.R"
[1] "hello"
Это то, что я считаю, что Дехманн ищет.