Запуск R-кода из командной строки (Windows)
У меня есть некоторый R-код внутри файла с именем analyse.r. Я хотел бы иметь возможность из командной строки (CMD) запускать код в этом файле без необходимости проходить через R-терминал, и я также хотел бы иметь возможность передавать параметры и использовать эти параметры в своем коде, что-то как следующий псевдокод:
C:\>(execute r script) analyse.r C:\file.txt
и это выполнит script и передаст "C:\file.txt" в качестве параметра для script, а затем он сможет использовать его для дальнейшей обработки на нем.
Как это сделать?
Ответы
Ответ 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"