Как ввести переменную Shell в R скрипт? - PullRequest
0 голосов
/ 13 февраля 2019

Я хотел бы запустить R Script внутри Shell Script, что не является для меня проблемой:

Пример:

#!/bin/bash
_input_file=$1
_output_file=$2
some shell script...
........
Rscript R.r >"_output_file"          #call R script

Моя проблема в том, что я хотел быопределить переменную (_output_file) в моем сценарии оболочки для назначения моему сценарию R._output_file содержит путь и имя выходной папки.

R скрипт:

#!/usr/bin/env Rscript
x <- read.csv(_output_file,"/results/abc.txt", header=F)
library(plyr)
.....
.........

Поэтому я бы хотел, чтобы переменная вызова (_output_file) и ее путь могли прочитать файл abc.txt.Итак, как ввести переменную Shell в R скрипт?

1 Ответ

0 голосов
/ 13 февраля 2019

Обычно я так делаю

Файл сценария оболочки

#!/bin/bash

_input_file=$1
_output_file=$2

# preprocessing steps

# run R.r script with ${_output_file} parameter
Rscript --vanilla R.r ${_output_file} 

echo
echo "----- DONE -----"
echo

exit 0

Файл Rr

### Ref links
# http://tuxette.nathalievilla.org/?p=1696
# https://swcarpentry.github.io/r-novice-inflammation/05-cmdline/

# get the input passed from the shell script
args <- commandArgs(trailingOnly = TRUE)
str(args)
cat(args, sep = "\n")

# test if there is at least one argument: if not, return an error
if (length(args) == 0) {
  stop("At least one argument must be supplied (input file).\n", call. = FALSE)
} else {
  print(paste0("Arg input:  ", args[1]))
}

# use shell input
file_to_read <- paste0(args[1], "/results/abc.txt")
print(paste0("Input file:  ", file_to_read))
df <- read.csv(file_to_read, header = F)

# check 
head(df)
summary(df)

library(plyr)

# do something here
...