2009-07-10 47 views

Trả lời

45

Trên thực tế các công việc sau cho tôi:

write("prints to stderr", stderr()) 

write("prints to stdout", stdout()) 
+0

Đây là trên Linux, với R 2.8.1 (sử dụng Rscript) – Frank

+1

Mã này cũng hoạt động trên Windows. Để kiểm soát định dạng nhiều hơn, bạn có thể sử dụng con mèo thay vì viết. –

+0

FWIW, điều này bị hạn chế, ở chỗ nó chỉ hoạt động nếu đối số đầu tiên có thể được xuất ra bởi 'cat'. Có những lớp đòi hỏi 'in' để làm việc, nơi bạn phải sử dụng' sink', như Galwegian nói dưới đây. – Harlan

7

Có thể định cấu hình chức năng in để in thành tiêu bản không?

From Ripley himself:

Không, nhưng mà đầu ra tiêu chuẩn đi được điều khiển bởi chìm(), vì vậy bạn có thể đạt được tác dụng tương tự. R nội bộ không biết đầu ra là gì từ print() (không chỉ là một hàm nhưng hàng trăm phương thức).

7

Dưới đây là một phiên bản linh hoạt hơn để gỡ lỗi/sử dụng tiết trong Rscript. Không chỉ nó in đến stderr như bạn yêu cầu, nhưng nó cũng cho phép bạn vượt qua số biến của các đối số, các loại vv, như printf.

v <- function(...) cat(sprintf(...), sep='', file=stderr()) 

Bây giờ người ta có thể làm những việc như:

v("name: %s age: %d\n", name, age) 

, vv

+0

Điều này thật tuyệt vời !!! Đối với những người không hiểu ..., Hãy tham khảo điều này .. http://stackoverflow.com/questions/3057341/how-to-use-rs-ellipsis-feature-when-writing-your-own-function – myloginid

0
message('for writing diagnostic info to standard error') 

nhắn được sử dụng để tạo ra các thông điệp 'đơn giản' chẩn đoán mà không phải là cảnh báo hay lỗi, nhưng tuy nhiên được thể hiện dưới dạng điều kiện. Không giống như cảnh báo và lỗi, một dòng mới cuối cùng được coi là một phần của thông báo và là tùy chọn. Trình xử lý mặc định gửi thông báo đến kết nối stderr().

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