可以使 data.table 输出看起来更像 tibble 输出吗? (10 行,只打印适合屏幕的列)

Can data.table output be made to look more like tibble output? (10 rows, print only columns that fit screen)

是否可以更改 data.table 中的设置,以便默认仅打印 10 行和适合屏幕的列?就像 tibble df 一样。

我通常在笔记本电脑上工作,希望避免出现下面示例中的输出。 非常感谢!

library(data.table)
dt_table <- as.data.table(mtcars)
dt_table 

输出:


dt_table
     mpg cyl  disp  hp drat    wt  qsec vs am gear
 1: 21.0   6 160.0 110 3.90 2.620 16.46  0  1    4
 2: 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4
 3: 22.8   4 108.0  93 3.85 2.320 18.61  1  1    4
 4: 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3
 5: 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3
 6: 18.1   6 225.0 105 2.76 3.460 20.22  1  0    3
 7: 14.3   8 360.0 245 3.21 3.570 15.84  0  0    3
 8: 24.4   4 146.7  62 3.69 3.190 20.00  1  0    4
 9: 22.8   4 140.8  95 3.92 3.150 22.90  1  0    4
10: 19.2   6 167.6 123 3.92 3.440 18.30  1  0    4
11: 17.8   6 167.6 123 3.92 3.440 18.90  1  0    4
12: 16.4   8 275.8 180 3.07 4.070 17.40  0  0    3
13: 17.3   8 275.8 180 3.07 3.730 17.60  0  0    3
14: 15.2   8 275.8 180 3.07 3.780 18.00  0  0    3
15: 10.4   8 472.0 205 2.93 5.250 17.98  0  0    3
16: 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3
17: 14.7   8 440.0 230 3.23 5.345 17.42  0  0    3
18: 32.4   4  78.7  66 4.08 2.200 19.47  1  1    4
19: 30.4   4  75.7  52 4.93 1.615 18.52  1  1    4
20: 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4
21: 21.5   4 120.1  97 3.70 2.465 20.01  1  0    3
22: 15.5   8 318.0 150 2.76 3.520 16.87  0  0    3
23: 15.2   8 304.0 150 3.15 3.435 17.30  0  0    3
24: 13.3   8 350.0 245 3.73 3.840 15.41  0  0    3
25: 19.2   8 400.0 175 3.08 3.845 17.05  0  0    3
26: 27.3   4  79.0  66 4.08 1.935 18.90  1  1    4
27: 26.0   4 120.3  91 4.43 2.140 16.70  0  1    5
28: 30.4   4  95.1 113 3.77 1.513 16.90  1  1    5
29: 15.8   8 351.0 264 4.22 3.170 14.50  0  1    5
30: 19.7   6 145.0 175 3.62 2.770 15.50  0  1    5
31: 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5
32: 21.4   4 121.0 109 4.11 2.780 18.60  1  1    4


编辑:

我找到了部分解决方案:


options(datatable.print.nrows=5,
        datatable.print.trunc.cols = T)

这对我有用。我有谁知道如何分别控制多少 n 个顶部/底部行?上面的选项将打印前 5 行/后 5 行——如果我想要前 10 行,后 2 行怎么办?这可能吗?

开始于:

> nycflights13::flights
# A tibble: 336,776 x 19
    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay
   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>     <dbl>
 1  2013     1     1      517            515         2      830            819        11
 2  2013     1     1      533            529         4      850            830        20
 3  2013     1     1      542            540         2      923            850        33
 4  2013     1     1      544            545        -1     1004           1022       -18
 5  2013     1     1      554            600        -6      812            837       -25
 6  2013     1     1      554            558        -4      740            728        12
 7  2013     1     1      555            600        -5      913            854        19
 8  2013     1     1      557            600        -3      709            723       -14
 9  2013     1     1      557            600        -3      838            846        -8
10  2013     1     1      558            600        -2      753            745         8
# ... with 336,766 more rows, and 10 more variables: carrier <chr>, flight <int>,
#   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>,
#   minute <dbl>, time_hour <dttm>
> as.data.table(nycflights13::flights)
        year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time
     1: 2013     1   1      517            515         2      830            819
     2: 2013     1   1      533            529         4      850            830
     3: 2013     1   1      542            540         2      923            850
     4: 2013     1   1      544            545        -1     1004           1022
     5: 2013     1   1      554            600        -6      812            837
    ---                                                                         
336772: 2013     9  30       NA           1455        NA       NA           1634
336773: 2013     9  30       NA           2200        NA       NA           2312
336774: 2013     9  30       NA           1210        NA       NA           1330
336775: 2013     9  30       NA           1159        NA       NA           1344
336776: 2013     9  30       NA            840        NA       NA           1020
        arr_delay carrier flight tailnum origin dest air_time distance hour minute
     1:        11      UA   1545  N14228    EWR  IAH      227     1400    5     15
     2:        20      UA   1714  N24211    LGA  IAH      227     1416    5     29
     3:        33      AA   1141  N619AA    JFK  MIA      160     1089    5     40
     4:       -18      B6    725  N804JB    JFK  BQN      183     1576    5     45
     5:       -25      DL    461  N668DN    LGA  ATL      116      762    6      0
    ---                                                                           
336772:        NA      9E   3393    <NA>    JFK  DCA       NA      213   14     55
336773:        NA      9E   3525    <NA>    LGA  SYR       NA      198   22      0
336774:        NA      MQ   3461  N535MQ    LGA  BNA       NA      764   12     10
336775:        NA      MQ   3572  N511MQ    LGA  CLE       NA      419   11     59
336776:        NA      MQ   3531  N839MQ    LGA  RDU       NA      431    8     40
                  time_hour
     1: 2013-01-01 05:00:00
     2: 2013-01-01 05:00:00
     3: 2013-01-01 05:00:00
     4: 2013-01-01 05:00:00
     5: 2013-01-01 06:00:00
    ---                    
336772: 2013-09-30 14:00:00
336773: 2013-09-30 22:00:00
336774: 2013-09-30 12:00:00
336775: 2013-09-30 11:00:00
336776: 2013-09-30 08:00:00

我们可以通过以下方式完成大部分工作:

> print(as.data.table(nycflights13::flights), nrows=5, topn=5, class=TRUE, trunc.cols=TRUE)
         year month   day dep_time sched_dep_time dep_delay arr_time
        <int> <int> <int>    <int>          <int>     <num>    <int>
     1:  2013     1     1      517            515         2      830
     2:  2013     1     1      533            529         4      850
     3:  2013     1     1      542            540         2      923
     4:  2013     1     1      544            545        -1     1004
     5:  2013     1     1      554            600        -6      812
    ---                                                             
336772:  2013     9    30       NA           1455        NA       NA
336773:  2013     9    30       NA           2200        NA       NA
336774:  2013     9    30       NA           1210        NA       NA
336775:  2013     9    30       NA           1159        NA       NA
336776:  2013     9    30       NA            840        NA       NA
12 variables not shown: [sched_arr_time <int>, arr_delay <num>, carrier <char>, flight <int>, tailnum <char>, origin <char>, dest <char>, air_time <num>, distance <num>, hour <num>, ...]

我不知道如何 显示底部 so-many-rows。除此之外,幸运的是,我们可以将这些设置为选项,per-session(如下面的 R repl 提示)或 .Rprofile 文件中以供持久使用。

options(datatable.print.nrows=5, datatable.print.topn=5, datatable.print.class=TRUE, datatable.print.trunc.cols=TRUE)
as.data.table(nycflights13::flights)
#          year month   day dep_time sched_dep_time dep_delay arr_time
#         <int> <int> <int>    <int>          <int>     <num>    <int>
#      1:  2013     1     1      517            515         2      830
#      2:  2013     1     1      533            529         4      850
#      3:  2013     1     1      542            540         2      923
#      4:  2013     1     1      544            545        -1     1004
#      5:  2013     1     1      554            600        -6      812
#     ---                                                             
# 336772:  2013     9    30       NA           1455        NA       NA
# 336773:  2013     9    30       NA           2200        NA       NA
# 336774:  2013     9    30       NA           1210        NA       NA
# 336775:  2013     9    30       NA           1159        NA       NA
# 336776:  2013     9    30       NA            840        NA       NA
# 12 variables not shown: [sched_arr_time <int>, arr_delay <num>, carrier <char>, flight <int>, tailnum <char>, origin <char>, dest <char>, air_time <num>, distance <num>, hour <num>, ...]

非常接近。

我们可以使用tidytable

tidytable::as_tidytable(dt_table) 

-输出

# A tidytable: 32 × 11
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
 2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
 3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
 4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
 5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
 6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
 7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
 8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2
 9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
# … with 22 more rows

这也会保留 data.table class

> str(tidytable::as_tidytable(dt_table) )
Classes ‘tidytable’, ‘data.table’ and 'data.frame': 32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
 - attr(*, ".internal.selfref")=<externalptr>