2010-12-28 32 views
15

Tôi có tập lệnh bash tạo tệp csv và tệp R tạo biểu đồ từ đó.đối số dòng lệnh trong bash tới Rscript

Vào cuối của kịch bản bash tôi gọi Rscript Graphs.R 10

Câu trả lời tôi nhận được là như sau:

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

Một vài dòng đầu tiên của Graphs.R của tôi là:

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

Không biết tôi đang làm gì sai? Lời khuyên trên mạng xuất hiện với tôi để nói rằng điều này sẽ làm việc. Nó rất khó để làm cho tinh thần của commandArgs

Trả lời

13

Với sự sau trong args.R

print(commandArgs(TRUE)[1]) 

và sau đây trong args.sh

Rscript args.R 10 

Tôi nhận được kết quả sau từ bash args.sh

[1] "10" 

và không có lỗi. Nếu cần, hãy chuyển sang kiểu số sử dụng as.numeric(commandArgs(TRUE)[1]).

+0

Cảm ơn. Tôi đã phát hiện ra nó trả về như một chuỗi. Làm thế nào để chuyển đổi thành giá trị số. Tôi chỉ đang cố gắng tìm câu trả lời cho điều đó. – samar

+0

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

+0

Chỉ tìm thấy câu trả lời. x <- (commandArgs (TRUE) [1]) và sau đó CorrAns <- eval (phân tích cú pháp (văn bản = x)) – samar

1

Đọc docs, có vẻ như bạn có thể cần phải loại bỏ các TRUE từ cuộc gọi đến commandArgs() như bạn không gọi kịch bản với --args. Hoặc là, hoặc bạn cần gọi số Rscript Graphs.R --args 10.

Cách sử dụng

commandArgs(trailingOnly = FALSE)

Arguments

trailingOnly logic. Chỉ nên trả lại đối số sau khi trả lại --args?

+0

Tôi đã thử cách này và nhận được thông báo lỗi sau – samar

+0

Cảm ơn bạn.Tôi đã làm điều này nhưng thông báo lỗi giống hệt với những gì tôi báo cáo lần đầu tiên – samar

+0

@samar Xem câu trả lời mới của tôi và xem liệu điều đó có hữu ích không? – marcog

5

Chỉ cần một đoán, có lẽ bạn cần phải chuyển đổi CorrAns từ nhân vật để số, kể từ khi phần giá trị gia tăng của ?CommandArgs nói:

Một vector nhân vật chứa tên của thực thi và người dùng cung cấp đối số dòng lệnh.

UPDATE: Nó có thể được dễ dàng như:

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

Cảm ơn. Không hoàn toàn chắc chắn làm thế nào để thực hiện điều đó. Tôi không nghĩ rằng tên biến trong R được liên kết với một trong hai ký tự hoặc số. Tuy nhiên sẽ kiểm tra lại thông qua R Intro book. – samar

+0

@samar Tôi khuyên bạn nên thử 'as.numeric (args [1])' như tôi đã làm trong câu trả lời cập nhật của mình. –

+0

Cảm ơn rất nhiều. Đây là một trang web mới cho tôi giống như R là một trải nghiệm mới cho tôi. Cả hai đều cung cấp sự hài lòng tuyệt vời. – samar

0

Rscript args.R 10 trong đó 10 là giá trị số mà chúng tôi muốn chuyển sang tập lệnh R.

print(as.numeric(commandArgs(TRUE)[1]) in giá trị mà sau đó có thể được chỉ định cho một biến.

+0

Điều này giống với câu trả lời được cập nhật của tôi và câu trả lời bạn chấp nhận là "tốt nhất" không trả lời câu hỏi của bạn. –

+0

Joshua, theo như tôi biết tôi đã thích nghi câu trả lời của marcog để phù hợp với nhu cầu của tôi và sau đó nhập nó như là câu trả lời "tốt nhất". Tôi không nhớ rằng câu trả lời mới nhất của bạn đã được hiển thị tại thời điểm đó. Tuy nhiên, tôi đánh giá cao sự hỗ trợ. – samar

Các vấn đề liên quan