Запуск кода R из командной строки (Windows) - PullRequest
22 голосов
/ 17 августа 2010

У меня есть некоторый R-код внутри файла с именем analyse.r. Я хотел бы иметь возможность из командной строки (CMD) запускать код в этом файле без необходимости проходить через терминал R, и я также хотел бы иметь возможность передавать параметры и использовать эти параметры в моем коде, что-то как следующий псевдокод:

C:\>(execute r script) analyse.r C:\file.txt

, и это выполнит сценарий и передаст "C: \ file.txt" в качестве параметра сценарию, а затем он сможет использовать его для дальнейшей обработки.

Как мне это сделать?

Ответы [ 4 ]

28 голосов
/ 17 августа 2010
  1. Вы хотите Rscript.exe.

  2. Вы можете контролировать вывод из скрипта - см. sink() и его документацию.

  3. Вы можете получить доступ к аргументам команды через commandArgs().

  4. Вы можете более точно управлять аргументами командной строки через пакеты getopt и optparse .

  5. Если ничего не помогает, попробуйте прочитать руководства или предоставленную документацию

5 голосов
/ 18 января 2017

Определите, где R устанавливается.Для окна 7 путь может быть

1.C:\Program Files\R\R-3.2.2\bin\x64>
2.Call the R code
3.C:\Program Files\R\R-3.2.2\bin\x64>\Rscript Rcode.r
3 голосов
/ 06 августа 2014

Существует два способа запуска R-сценария из командной строки (Windows или оболочка Linux).

1) R CMD-путь R CMD BATCH, за которым следует имя R-сценария.Вывод этого также может быть передан в другие файлы по мере необходимости.

Этот способ, однако, немного устарел, и использование Rscript становится все более популярным.

2) Способ Rscript (поддерживается ввсе платформы. Следующий пример, однако, протестирован только для Linux) Этот пример включает в себя передачу пути файла CSV, имени функции и индекса атрибута (строки или столбца) файла CSV, с которым должна работать эта функция.

Содержимое файла test.csv x1, x2 1,2 3,4 5,6 7,8

Составьте R-файл «aR» с содержимым

#!/usr/bin/env Rscript

cols <- function(y){
   cat("This function will print sum of the column whose index is passed from commandline\n")
   cat("processing...column sums\n")
   su<-sum(data[,y])
   cat(su)
   cat("\n")
}

rows <- function(y){
   cat("This function will print sum of the row whose index is passed from commandline\n")
   cat("processing...row sums\n")
   su<-sum(data[y,])
   cat(su)
   cat("\n")
}
#calling a function based on its name from commandline … y is the row or column index
FUN <- function(run_func,y){
    switch(run_func,
        rows=rows(as.numeric(y)),
        cols=cols(as.numeric(y)),
        stop("Enter something that switches me!")
    )
}

args <- commandArgs(TRUE)
cat("you passed the following at the command line\n")
cat(args);cat("\n")
filename<-args[1]
func_name<-args[2]
attr_index<-args[3]
data<-read.csv(filename,header=T)
cat("Matrix is:\n")
print(data)
cat("Dimensions of the matrix are\n")
cat(dim(data))
cat("\n")
FUN(func_name,attr_index)

Выполнение следующегов оболочке linux Rscript aR /home/impadmin/test.csv cols 1 дает вам следующее в командной строке /home/impadmin/test.csv cols 1 Матрица: x1 x2 1 1 2 2 3 4 3 5 6 47 8 Размеры матрицы равны 4 2 Эта функция выведет сумму столбца, индекс которого передан из обработки командной строки ... суммы столбцов 16

Выполнение следующего в оболочке linux Rscript aR / home / impadmin /test.csv rows 2 дает вам следующее в командной строке /home/impadmin/test.csv rows 2 Matrix is: x1 x2 1 1 2 2 3 4 3 5 6 4 7 8 Размеры матрицы равны 4 2 Эта функция выведет суммустроки, индекс которой передан из обработки командной строки ... суммы строк 7

Мы также можем сделать исполняемый скрипт R следующим образом (в linux) chmod a + x aR и снова запустить второй пример как ./aR /home/impadmin/test.csv строки 2

Это также должно работать для командной строки Windows ..

0 голосов
/ 21 декабря 2018

сохранить следующее в текстовом файле

f1 <- function(x,y){
print (x)
print (y)
}
args = commandArgs(trailingOnly=TRUE)
f1(args[1], args[2])

Нет, запустите следующую команду в Windows cmd

Rscript.exe path_to_file "hello" "world"

Это напечатает следующее

[1] "hello"
[1] "world"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...