Можно ли указать параметры командной строки для R-скрипта в RStudio?

Я хочу использовать RStudio для редактирования R-скрипта с параметрами командной строки, например,

my_rscript --dataset mydataset

а затем, чтобы прочитать значение optiion в переменную R, скажем,dataset, например, используя optparse библиотека.

однако я не смог найти, где acommand line может быть предоставлена в RStudio, чтобы я мог использовать функцию "Source on save". Вместо этого, я должен записать все параметры программы в самой программе:

dataset <- "mydataset"

что требует изменения текста скрипта каждый раз мне нужно указывать разные данные.

кто-нибудь знает, как предоставить информацию в командной строке?

6 ответов


Я знаю, что этот вопрос старый, и ссылка ниже старая, но она отвечает на вопрос. Нет, невозможно (или не было по состоянию на 29 января 2012 года) получить доступ к аргументам командной строки из RStudio.

ссылка https://support.rstudio.com/hc/communities/public/questions/200659066-Accessing-command-line-options-in-RStudio?locale=en-us


пока я делаю это так: Откройте новое окно редактирования нового Rscript. Если я хочу сохранить его, я могу сохранить и назвать его чем-то вроде: test_myscript.R Это содержание test_myscript.R:

debug(getopt) # suppose I want to debug 'getopt' function in 'myscript.R'
system("myscript.R -a -b -c")
# Debug process start after this. 
# Check ?browser for help about navigating inside browser

вы можете вызвать свои программы, используя Rscript programname.r arg1 arg2 arg3. Аргументы передаются в commandArgs, поэтому верно следующее:

Rscript programname.r F N 32

> args <- commandArgs(trailingOnly=TRUE)
> args[1]
[1] F
> args[2]
[1] N
> args[3]
[1] 32

Это сработало для меня: Мой Rscript выглядит следующим образом:

args <- commandArgs()
print(paste0("args:", args))
print(paste0("args[1]:",args[1]))
print(paste0("args[2]:",args[2]))
print(paste0("args[3]:",args[3]))
print(paste0("# of args:",length(args)))

'

чтобы эмулировать ввод командной строки, который я бы использовал с Rscript, я ввел это в RStudio:

commandArgs <- function() c("AMZN", 10, 200)

который дал желаемый результат:

[1] "args:AMZN" "args:10"   "args:200" 
[1] "args[1]:AMZN"
[1] "args[2]:10"
[1] "args[3]:200"
[1] "# of args:3"

если вы заинтересованы в использовании, например, argparser и продолжить разработку / анализ в интерактивном режиме с помощью Rstudio, вы можете использовать следующую работу:

  1. написать парсер командной строки my_rscript и создать объект args, который содержит все разобрано ввода.
  2. добавить строку, которая спасает args объект в файл.
  3. Run my_rscript из командной строки и укажите интересующие аргументы.
  4. загрузить args объект из файла в Rstudio и продолжить интерактивно

пример:

library("argparser")
parser <- arg_parser(description='Process commandline arguments')
parser <- add_argument(parser, arg="--dataset", type="character", help = "Dataset argument")
args = parse_args(parser)
args_file = "tempArgObjectFile.rds"
saveRDS(args, args_file); print(args); quit(); #comment this after creating args_file
args = readRDS(args_file)  #use this to load during interactive development

Это действительно старый, но я наткнулся на него, пытаясь сделать то же самое, и я закончил тем, что просто попробовал следующее, и хорошо и быстро, если люди хотят попробовать (вероятно, полезно только для команд, которые имеют пару простых args, хотя):

учитывая мой Rscript, который в настоящее время начинается:

args <- commandArgs(TRUE)
df <- read.csv(args[1], sep=",", check.names=FALSE, row.names = 1)
.
. # Do some analysis and plotting etc.
.

если бы я хотел эмулировать командную строку, которую в противном случае получил бы Rscript, вы можете сделать args вектор вверх "вручную":

args <- c("/path/to/my/inputfile.csv")

затем args[1] принимает то же значение, что и всегда. и я просто запускаю все остальное в скрипте, выделяя и выполняя в RStudio.