2013-05-03 44 views
24

Trong R, tôi tự hỏi nếu nó có thể tạm thời chuyển hướng đầu ra của bàn điều khiển đến một biến?Trong R, có thể chuyển hướng đầu ra của bàn điều khiển sang một biến không?

p.s. Có một vài ví dụ trên web về cách sử dụng sink() để chuyển hướng đầu ra vào một tên tệp, nhưng không có gì mà tôi có thể tìm thấy hiển thị cách chuyển hướng vào một biến.

p.p.s. Lý do điều này hữu ích, trên thực tế, tôi cần phải in ra một phần của đầu ra giao diện điều khiển mặc định từ một số chức năng dựng sẵn trong R.

+2

Bạn đang xa, xa tốt hơn viết lại các chức năng thay hơn là phân tích văn bản mà chúng xuất ra. –

+3

'? Capture.output'? –

+0

@Ari B. Friedman Thật không may, điều đó không khả thi. Hiện tại, tất cả những gì tôi muốn làm là cắt bớt một số nguồn cấp dữ liệu bổ sung để nén đầu ra xuống độ dài có thể quản lý được. – Contango

Trả lời

23

Tôi tin rằng results <- capture.output(...) là những gì bạn cần (tức là sử dụng mặc định file=NULL tranh luận). sink(textConnection("results")); ...; sink() nên làm việc là tốt, nhưng như ?capture.output nói, capture.output() là:

liên quan đến ‘chìm’ trong cùng một cách mà ‘với’ liên quan đến ‘đính kèm’.

... điều này gợi ý rằng capture.output() nói chung sẽ tốt hơn vì nó được chứa nhiều hơn (ví dụ: bạn không cần phải nhớ để chấm dứt sink()).

Nếu bạn muốn gửi đầu ra của nhiều câu lệnh đến biến, bạn có thể bọc chúng trong ngoặc nhọn {}, nhưng nếu khối đủ phức tạp, có thể tốt hơn để sử dụng sink() trong các chức năng).

+0

Ben, hai ghi chú: 1) 'results <- sink()' sẽ không làm gì cả - 'sink()' luôn trả về NULL. 2) Tôi không đồng ý rằng 'capture.output' tốt hơn' sink' - ngược lại, vì 'sink' cho phép mã không phải là một cuộc gọi hàm duy nhất. Vui lòng làm theo câu hỏi của tôi: http://stackoverflow.com/q/25781458/684229 – TMS

9

Để lưu bản ghi, thực sự có thể lưu trữ stdout trong biến với sự trợ giúp của kết nối nhiệt tình mà không cần gọi capture.output - ví dụ: khi bạn muốn lưu cả kết quả và tiêu chuẩn. Ví dụ:

  1. Chuẩn bị biến cho đầu ra R chuyển hướng:

    > stdout <- vector('character') 
    > con <- textConnection('stdout', 'wr', local = TRUE) 
    
  2. Chuyển hướng đầu ra:

    > sink(con) 
    
  3. Do một số nội dung:

    > 1:10 
    
  4. End các dòng:

    > sink() 
    
  5. Đóng kết nối tạm thời:

    > close(con) 
    
  6. Kiểm tra kết quả:

    > stdout 
    [1] " [1] 1 2 3 4 5 6 7 8 9 10" 
    
+0

Câu trả lời hay, cảm ơn !! – Contango

+0

Đó gần như là những gì tôi đang tìm kiếm. Xem http://stackoverflow.com/questions/24396806/convert-a-message-to-a-character-vector để biết cách chụp thư trong khi vẫn lưu kết quả – Latrunculia

+0

@Latrunculia cho mục tiêu đó, tôi khuyên bạn nên kiểm tra 'pander :: evals' ví dụ: https://cran.rstudio.com/web/packages/pander/vignettes/evals.html – daroczig

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