2010-12-28 31 views
15

Mam skrypt bash, który tworzy plik csv i plik R, który tworzy wykresy z tego.Argumenty wiersza polecenia w bashie do Rscript

Na końcu skryptu bash nazywam Rscript Graphs.R 10

Odpowiedź dostać się następująco:

Error in is.vector(X) : subscript out of bounds 
Calls: print ... <Anonymous> -> lapply -> FUN -> lapply -> is.vector 
Execution halted 

Pierwszych kilka wierszy mojego Graphs.R są:

#!/bin/Rscript 
args <- commandArgs(TRUE) 
CorrAns = args[1] 

Nie mam pojęcia, co robię źle? Rada w sieci wydaje mi się, że to powinno zadziałać. Jest bardzo ciężko, aby poczucie commandArgs

Odpowiedz

13

z następującym w args.R

print(commandArgs(TRUE)[1]) 

i następujące w args.sh

Rscript args.R 10 

Otrzymuję następujące dane wyjściowe z bash args.sh

[1] "10" 

i bez błędu. W razie potrzeby przekonwertuj na typ liczbowy, używając as.numeric(commandArgs(TRUE)[1]).

+0

Dzięki. Odkryłem, że zwraca jako ciąg znaków. Jak przekonwertować to na wartość liczbową. Próbuję tylko znaleźć odpowiedź na to pytanie. – samar

+0

@samar 'print (jako .numeric (commandArgs (TRUE) [1]))' wypisuje '[1] 10'. – marcog

+0

Po prostu znalazłem odpowiedź. x <- (commandArgs (TRUE) [1]), a następnie CorrAns <- eval (parse (text = x)) – samar

1

Czytając docs, wydaje się, może być konieczne, aby usunąć TRUE z wezwaniem do commandArgs() jak nie wywołać skrypt z --args. Albo to, albo musisz zadzwonić pod numer Rscript Graphs.R --args 10.

Wykorzystanie

commandArgs(trailingOnly = FALSE)

Argumenty

trailingOnly logiczne. Czy powinny być zwracane tylko argumenty o wartości po ?

+0

Próbowałem tego i otrzymałem następujący komunikat o błędzie – samar

+0

Dzięki.Zrobiłem to, ale komunikat o błędzie jest identyczny z pierwszym zgłoszeniem. – samar

+0

@samar Sprawdź moją nową odpowiedź i zobacz, czy to pomaga? – marcog

5

tylko przypuszczenie, być może trzeba konwertować CorrAns z charakterem na numeryczne, od sekcji Value ?CommandArgs mówi:

Wektor znaków zawierający nazwę wykonywalnego i tym użytkownik dostarczone argumenty wiersza poleceń.

UPDATE: To może być tak proste, jak:

#!/bin/Rscript 
args <- commandArgs(TRUE) 
(CorrAns = args[1]) 
(CorrAns = as.numeric(args[1])) 
+0

Dzięki. Nie jestem pewien, jak to wdrożyć. Nie sądziłem, że nazwy zmiennych w R były połączone z dowolną postacią lub cyfrą. Jednak ponownie przejrzysz książkę R Intro. – samar

+0

@samar Proponuję wypróbować 'as.numeric (args [1])' jak w mojej zaktualizowanej odpowiedzi. –

+0

Wielkie dzięki. To nowa strona dla mnie, tak jak R jest dla mnie nowym doświadczeniem. Obie zapewniają ogromną satysfakcję. – samar

0

Rscript args.R 10 gdzie 10 to wartość liczbowa, którą chcemy przekazać do skryptu R.

print(as.numeric(commandArgs(TRUE)[1]) wyświetla wartość, którą można następnie przypisać do zmiennej.

+0

To jest to samo, co moja zaktualizowana odpowiedź, a odpowiedź, którą zaakceptowałeś jako "najlepszy", nie odpowiada na twoje pytanie. –

+0

Joshua, o ile wiem, zaadaptowałem odpowiedź marcoga, aby pasowało do moich potrzeb, a następnie wpisałem ją jako "najlepszą" odpowiedź. Nie przypominam sobie, że twoja ostatnia odpowiedź była wtedy widoczna. Jednak doceniam pomoc. – samar

Powiązane problemy