Вот очень простой #!
скрипт, который создает функцию foo()
, единственной целью которой является отозвать его аргумент 'bar'
.
#! /home/gavin/R/2.13-patched/build/bin/Rscript --vanilla
foo <- function(bar) {
writeLines(paste("You supplied the following information:", bar))
}
## grab command arguments passed as -args
args <- commandArgs(TRUE)
## run foo
foo(args)
Мы получаем любые аргументы командной строки, переданные всценарий из оболочки с использованием функции commandArgs()
, а затем передать его в foo()
с последней строкой сценария.
Если у нас есть этот бит кода в файле foobar.R
, то мы можемпередайте аргумент и запустите скрипт, используя интерфейс Rscript
.Вы также должны сделать вышеупомянутый исполняемый файл (chmod
it).
Тогда скрипт можно назвать как и он работает следующим образом:
[gavin@desktop ~]$ ./foobar.R Cl
You supplied the following information: Cl
Но обратите внимание на информацию в ?Rscript
как, к сожалению, стандартные командные оболочки Windows не знают о #!
подобных скриптах, поэтому вам может потребоваться установить другую оболочку (справка предполагает, что оболочка Cygwin должна работать), чтобы использовать функциональность, которую я показываю.
Обновление: Использование source()
и readline()
.
Альтернатива, если вы можете обойтись без неинтерактивного запуска (т. Е. Вы не открываете R GUI изапустить одну строку кода), это просто source()
сценарий.Например, если это было в вызове сценария barfoo.R
:
dynamicwilcox <- function() {
ANSWER <- readline("What column do you want to work on? ")
if(ANSWER=="Ph") {
writeLines("column was 'Ph'")
} else if(ANSWER=="Cl") {
writeLines("column was 'Cl'")
} else {
writeLines(paste("Sorry, we don't know what to do with column", ANSWER))
}
ANSWER ## return something
}
dynamicwilcox()
Затем из командной строки R Gui, мы могли бы сделать:
R> source("barfoo.R")
What column do you want to work on? Cl
column was 'Cl'
или если вы не хотитечтобы указать полный путь, сделайте следующее:
R> source(file.choose())
readline()
прекрасно работает при использовании в интерактивном сеансе R и действительно является лучшим инструментом для работы - это именно то, для чего он предназначен.
Вся предпосылка о том, что вы хотите запустить скрипт в пакетном режиме, но предоставить некоторую информацию, не имеет особого смысла.R ожидает, что скрипты будут автономными при запуске в пакетном режиме.Вы можете не осознавать этого, но когда вы дважды щелкаете по своему сценарию, он запускается в пакетном режиме.