2013-07-04 32 views
9

Có thể sử dụng getOption("max.print") để giới hạn số lượng giá trị có thể được in từ một cuộc gọi chức năng duy nhất. Ví dụ:Dừng in sau số n dòng

options(max.print=20) 
print(cars) 

chỉ in 10 hàng đầu tiên của 2 cột. Tuy nhiên, max.print không hoạt động tốt trong danh sách. Đặc biệt nếu chúng được lồng sâu, số lượng dòng in trên bảng điều khiển vẫn có thể là vô hạn.

Có cách nào để chỉ định mức độ khó khăn hơn của số tiền có thể được in ra màn hình không? Ví dụ bằng cách xác định số lượng các dòng mà sau đó việc in ấn có thể bị gián đoạn? Cái gì đó cũng bảo vệ chống lại các đối tượng đệ quy khổng lồ?

Trả lời

4

Dựa một phần vào this question, tôi sẽ đề nghị chỉ xây dựng một wrapper cho print sử dụng capture.output để điều chỉnh những gì được in:

print2 <- function(x, nlines=10,...) 
    cat(head(capture.output(print(x,...)), nlines), sep="\n") 

Ví dụ:

> print2(list(1:10000,1:10000)) 
[[1]] 
    [1]  1  2  3  4  5  6  7  8  9 10 11 12 
    [13] 13 14 15 16 17 18 19 20 21 22 23 24 
    [25] 25 26 27 28 29 30 31 32 33 34 35 36 
    [37] 37 38 39 40 41 42 43 44 45 46 47 48 
    [49] 49 50 51 52 53 54 55 56 57 58 59 60 
    [61] 61 62 63 64 65 66 67 68 69 70 71 72 
    [73] 73 74 75 76 77 78 79 80 81 82 83 84 
    [85] 85 86 87 88 89 90 91 92 93 94 95 96 
    [97] 97 98 99 100 101 102 103 104 105 106 107 108 
+0

Lý do chính tại sao tôi muốn để giới hạn đầu ra là vì hiệu suất; in có thể rất chậm. Vì vậy, điều này sẽ không ngăn chặn điều đó. – Jeroen

+1

Vâng, điều đó chắc chắn đúng bởi vì tất cả điều này đang thực hiện là viết vào một kết nối văn bản và sau đó kéo ra số n đầu tiên của dòng. – Thomas

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