2013-07-04 11 views
9

Za pomocą getOption("max.print") można ograniczyć liczbę wartości, które można wydrukować z pojedynczego wywołania funkcji. Na przykład:Zatrzymaj drukowanie po n liczbie wierszy

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

drukuje tylko pierwsze 10 rzędów 2 kolumn. Jednak max.print nie działa bardzo dobrze list. Zwłaszcza jeśli są zagnieżdżone głęboko, ilość linii drukowanych na konsoli może być wciąż nieskończona.

Czy istnieje sposób na określenie dokładniejszego odcięcia ilości, która może zostać wydrukowana na ekranie? Na przykład określając liczbę linii, po której drukowanie może zostać przerwane? Coś, co chroni przed drukowaniem ogromnych przedmiotów rekursywnych?

Odpowiedz

4

częściowo oparte na this question, proponuję po prostu budowania otoki dla print który używa capture.output regulować, co jest wydrukowane:

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

Na przykład:

> 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

główny powód, dlaczego chcę ograniczenie wydajności wynika z wydajności; drukowanie może być bardzo powolne. To nie zapobiegnie temu. – Jeroen

+1

Tak, to prawda, ponieważ to wszystko polega na pisaniu do połączenia tekstowego i wyciągnięciu pierwszej liczby n linii. – Thomas