2012-02-22 31 views
5

Tôi đang sử dụng R và Sweave để tạo báo cáo.R/đối số Sweave

R CMD Sweave MyReport.Rnw

Tôi muốn để có thể gửi tham số để mã R vì báo cáo là, tất nhiên, "Dynamic" Vì vậy, tôi muốn có thể làm một cái gì đó như thế này:

R CMD SWeave MyReport.Rnw PatientId = 5

... và có mã R đọc giá trị PatientId trong một biến ...

Làm cách nào để thực hiện việc này? Ai đó đã đề cập đến việc sử dụng các biến môi trường nhưng điều đó có vẻ giống như một giải pháp không thanh lịch.

Trả lời

5

Để đối số được truyền từ dòng lệnh R, bạn có thể sử dụng chức năng commandArgs(), nhưng tiếc là R CMD Sweave không hỗ trợ tùy chọn dòng lệnh bổ sung. Tuy nhiên, bạn vẫn có thể gọi Sweave theo số R -e, ví dụ:

R -e "Sweave('MyReport.Rnw')" --args PatientId=1 

Trong MyReport.Rnw, bạn làm một số xử lý văn bản trên commandArgs(TRUE), mang đến cho bạn một chuỗi ký tự PatientId=1 trong trường hợp này.

Nhưng tôi tin thực hành tốt hơn là sử dụng hàm Sweave() trong tập lệnh R trực tiếp; ví dụ. trong trường hợp này bạn có thể viết quá trình này trong một kịch bản như

PatientId <- 1 
Sweave("MyReport.Rnw") 

và trong MyReport.Rnw bạn sử dụng các biến toàn cầu PatientId trực tiếp. Nếu bạn muốn tạo một loạt các báo cáo, thậm chí bạn có thể sử dụng vòng lặp cho PatientId.

1

Bạn cần phải 'ghi' giá trị mà nó có thể được 'đọc':

  • biến môi trường, như đã nói, là một cách tiếp cận dễ dàng với sys.getenv()

  • cấu hình hay các file dữ liệu bạn có thể đọc

  • lưu trữ cơ sở dữ liệu

. 10

vv pp Nhớ lại rằng mã R thực sự thực hiện vì vậy bạn luôn có thể làm một hai bước:

rScriptOne.r     # write to foo.txt 
R CMD Sweave MyReport.Rnw  # reads from foo.txt 
+0

Tôi thường cau mày khi sử dụng các biến môi trường, mà tôi tin rằng đây không phải là một thực hành tốt trong nghiên cứu tái sản xuất vì các biến môi trường thường chỉ dành riêng cho một hệ thống duy nhất. –

+0

Chúng không phải là yêu thích của tôi, nhưng R ví dụ sử dụng chúng một tấn số liệu đằng sau hậu trường và thực hiện thành công trên các nền tảng và hệ thống khác nhau. –

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