2014-09-11 15 views
5

Làm cách nào để có thể tách đầu ra của một số mã nhất định thành một biến? Tôi muốn đầu ra đó vẫn đi đến bàn điều khiển.Làm thế nào để phát/chia/sao chép giao diện điều khiển đầu ra thành biến trong R?

Tôi rất thích ký hiệu sink; Tôi không muốn sử dụng capture.output vì hai lý do:

  1. Nó yêu cầu mã tương ứng là một hàm duy nhất; Tôi không muốn làm phức tạp mã của mình bằng cách tạo các hàm chỉ để thu được kết quả đầu ra
  2. Nó không cho phép đầu ra bị bắt vẫn đi tới bàn điều khiển.

Tôi đã đưa ra mã bên dưới, nhưng có một chút phức tạp. Có giải pháp dễ dàng hơn không?

fileName <- tempfile() 
sink(fileName, split = TRUE) 
... 
sink() 
out <- readChar(fileName, file.info(fileName)$size) 
unlink(fileName) 
+0

Có thể sử dụng '%>%' (magrittr) hoặc '% >>%' (pipeR) để sao chép nội dung đang được gửi tới bàn điều khiển sang thao tác 'ghi' tiếp theo? Hoặc có thể đây là cơ hội để bạn xuất bản toán tử '% tee%' :-) trước 'magrittr'. Xem http://www.r-statistics.com/2014/08/simpler-r-coding-with-pipes-the-present-and-future-of-the-magrittr-package/ –

+0

bạn chỉ nên sử dụng 'vô ích .logger' nó làm mọi thứ cộng thêm – statquant

Trả lời

1

Mã của bạn dường như không quá tệ, nhưng bạn có thể sắp xếp mọi thứ một chút bằng cách sử dụng một textConnection:

sink(tt <- textConnection("results","w"),split=TRUE) 
print(11:15) 
## [1] 11 12 13 14 15 
sink() 
results 
## [1] "[1] 11 12 13 14 15" 
close(tt) ## clean up 

Điều duy nhất cần xem ra cho là nếu bạn không đóng kết nối, results sẽ có các ràng buộc bị khóa (xem ?textConnection), điều này có nghĩa là bạn không thể gán một giá trị mới cho nó.

Vector ký tự đầu ra có các ràng buộc bị khóa (xem ‘lockBinding’) cho đến khi ‘close’ được gọi trên kết nối.

Ngoài ra, bạn không cần phải quấn nhiều câu lệnh thành một chức năng để có được chúng vào capture.output() - bạn có thể sử dụng dấu ngoặc nhọn {} để làm cho nhiều câu lệnh thành một đầu ra đánh giá duy nhất ...

results <- capture.output(split=TRUE,{ 
    print("hello") 
    print("goodbye") 
}) 
Các vấn đề liên quan