2009-07-10 15 views
5

Có gói nào để xử lý các tùy chọn dòng lệnh trong R không?Có gói nào để xử lý các tùy chọn dòng lệnh trong R không?

Tôi biết commandArgs nhưng quá cơ bản. Kết quả của nó về cơ bản là tương đương với argcargv trong C, nhưng tôi cần một thứ gì đó trên đó, giống như boost::program_options trong C++ hoặc GetOptions::Long trong perl.

Cụ thể, tôi muốn chỉ định trước những tùy chọn nào được cho phép và cung cấp thông báo lỗi nếu người dùng chỉ định điều gì khác.

Cuộc gọi sẽ được như thế này (với tùy chọn người dùng --width = 32 --file = foo.txt):

R --vanilla --args --width=32 --file=foo.txt < myscript.R 

hoặc, nếu Rscript được sử dụng:

myscript.R --width=32 --file=foo.txt 

(Xin đừng nói, "tại sao bạn không viết nó cho mình, nó không phải là khó". Trong các ngôn ngữ khác bạn không cần phải viết nó cho mình hoặc. :)

Trả lời

8
+0

Tuyệt vời! Quá tệ, nó không phải là một phần của bản phân phối R (ít nhất không phải trong R 2.8.1). – Frank

2

Làm thế nào về lệnhArgsvớieval để có giải pháp tích hợp?

test.R

## 'trailingOnly=TRUE' means only parse args after '--args' 
args=(commandArgs(trailingOnly=TRUE)) 

## Supply default arguments 
if(length(args)==0){ 
    print("No arguments supplied.") 
    ##supply default values 
    a = 1 
    b = c(1,1,1) 
}else{ 
    for(i in 1:length(args)){ 
     eval(parse(text=args[[i]])) 
    } 
} 
print(a*2) 
print(b*3) 

và gọi nó

R CMD BATCH --no-save --no-restore '--args a=1 b=c(2,5,6)' test.R test.out 

Các hãy cẩn thận thông thường w.r.t sử dụng eval áp dụng tất nhiên.

Bị đánh cắp không biết xấu hổ từ điều này blog post.