2010-07-17 30 views
12

Nếu tôi có một kịch bản R:Làm cách nào để ngăn chặn đầu ra số dòng bằng cách sử dụng R CMD BATCH?

print("hi") 
commandArgs() 

Và tôi chạy nó bằng cách sử:

r CMD BATCH --slave --no-timing test.r output.txt 

Đầu ra sẽ chứa:

[1] "hi" 
[1] "/Library/Frameworks/R.framework/Resources/bin/exec/x86_64/R" 
[2] "-f"               
[3] "test.r"              
[4] "--restore"             
[5] "--save"              
[6] "--no-readline"            
[7] "--slave"              

Làm thế nào tôi có thể ngăn chặn những con số dòng [1 ] .. [7] trong đầu ra sao cho chỉ có đầu ra của tập lệnh xuất hiện?

+4

'mèo ("một cái gì đó \ n") ' – aL3xa

+0

@ aL3xa Nếu bạn đã viết hơn lên như một câu trả lời, tôi có thể đã bỏ phiếu cho nó. Nhưng như một lời nhận xét, tôi đã bỏ qua nó - nghĩ rằng "con mèo" phải làm gì với cái gì? " :) –

Trả lời

5

Vâng, MBq là đúng - sử dụng Rscript, hoặc, nếu nó nổi thuyền của bạn, littler:

$ cat /tmp/tommy.r 
#!/usr/bin/r 

cat("hello world\n") 
print(argv[]) 
$ /tmp/tommy.r a b c 
hello world 
[1] "a" "b" "c" 
$ 

Bạn có thể muốn nhìn vào cran gói getoptoptparse cho lập luận-phân tích như bạn muốn thực hiện bằng các ngôn ngữ lập trình khác/

+0

Câu trả lời này gây hiểu lầm. Tôi không nghĩ rằng vấn đề là với * làm thế nào * kịch bản R được gọi. Giải pháp là sử dụng 'cat' thay vì' print'. –

2

Sử dụng commandArgs(TRUE) và chạy tập lệnh của bạn với Rscript.

EDIT: Ok, tôi đã đọc sai câu hỏi của bạn. David đã đúng.

+1

Trong khi sử dụng commandArgs (TRUE) là một mẹo hay khi thực hiện phân tích cú pháp lệnh, nó không giải quyết câu hỏi, cụ thể là làm thế nào để ngăn chặn '[1]', '[2]', v.v. –

+0

@DavidJames Đúng, câu hỏi là gây hiểu nhầm, do đó câu trả lời này. – mbq

13

Sử dụng cat thay vì print nếu bạn muốn chặn số dòng ([1], [2], ...) ở đầu ra.

Tôi nghĩ bạn cũng sẽ muốn chuyển đối số dòng lệnh. Tôi nghĩ rằng cách dễ nhất để làm điều đó là để tạo ra một tập tin với RScript shebang:

Ví dụ, tạo ra một tập tin gọi là args.r:

#!/usr/bin/env Rscript 
args <- commandArgs(TRUE) 
cat(args, sep = "\n") 

Làm cho nó thực thi với chmod +x args.r và sau đó bạn có thể chạy nó với ./args.r ARG1 ARG2

FWIW, chuyển các tham số dòng lệnh bằng cú pháp R CMD BATCH ... là một sự đau đớn. Đây là cách bạn làm điều đó: R CMD BATCH "--args ARG1 ARG2" args.r Lưu ý các dấu ngoặc kép. Thảo luận nhiều hơn here

UPDATE: thay đổi dòng công việc trên #!/usr/bin/Rscript-#!/usr/bin/env Rscript để phản ứng lại bình luận @ MBq của (cảm ơn!)

+0

Điều này không phải là quá may mắn, kể từ khi Rscript nhảy qua hệ thống tập tin trong các distro khác nhau (và 32-64 bit phiên bản). Tuy nhiên, 'env' là ở đây để tiết kiệm trong ngày, và' #!/Usr/bin/env Rscript' luôn luôn hoạt động. – mbq

+0

@mbq mặc dù shebang ban đầu của tôi không may mắn, nhận xét của bạn là, vì vậy cảm ơn bạn –

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