Подтвердить что ты не робот

Запуск R-кода из командной строки (Windows)

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

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

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

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

4b9b3361

Ответ 1

  • Вы хотите Rscript.exe.

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

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

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

  • Если все остальное не работает, рассмотрите возможность чтения manuals или предоставленная документация

Ответ 2

Определите, где 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

Существует два способа запуска R script из командной строки (windows или linux shell.)

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

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

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

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

Составьте R файл "a.R", содержимое которого

#!/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 a.R/home/impadmin/test.csv cols 1 дает вы передали следующее в командной строке   /home/impadmin/test.csv cols 1 Матрица:     x1 x2   1 1 2   2 3 4   3 5 6   4 7 8 Размеры матрицы   4 2 Эта функция будет печатать сумму столбца, индекс которого передается из командной строки обработка... сумма столбцов  16

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

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

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

Ответ 4

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

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"