打印漂亮的数据。frames/tables 到控制台

Print pretty data.frames/tables to console

有没有办法以更易读的方式将小 data.frames 打印到控制台?

比如是否可以向控制台输出:

library(MASS)   
iris[1:5, ]

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa

作为

iris[1:5, ]

  +--------------+-------------+--------------+-------------+---------+
  | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
  +--------------+-------------+--------------+-------------+---------+
1 |          5.1 |         3.5 |          1.4 |         0.2 |  setosa |
2 |          4.9 |         3.0 |          1.4 |         0.2 |  setosa |
3 |          4.7 |         3.2 |          1.3 |         0.2 |  setosa |
4 |          4.6 |         3.1 |          1.5 |         0.2 |  setosa |
5 |          5.0 |         3.6 |          1.4 |         0.2 |  setosa |
  +--------------+-------------+--------------+-------------+---------+

我意识到大 data.frames 会占用不必要的时间,但如果可以的话,我希望能够以更有条理的方式查看小框架。

特别是,当我有两个彼此相邻的文本字段时,在两个字段之间用管道将它们分开会容易得多,因为单词之间的间距与列之间的间距大小相同。

谢谢

您可以尝试几种方法。

  1. 为您的 .Rprofile 添加几个辅助函数。在我的个人资料中,我有

    hh = function(d) 
       if(class(d)=="matrix"|class(d)=="data.frame") d[1:5,1:5]
    

    此函数打印数据框的左上角。我也有

    ht = function(d, n=6) rbind(head(d, n), tail(d,n))
    
  2. 为数据框创建您自己的 S3 打印函数,例如

    print.data.frame = function(x, ..., digits = NULL, 
                            quote = FALSE, right = TRUE, 
                            row.names = TRUE) 
                        message("hi")
    
  3. 使用包,例如dplyr。但是,如果您只想要漂亮的打印效果,这就有点矫枉过正了。

如果它对任何人有帮助,我只是偶然发现 knitrkable 实现了漂亮的打印效果。结合上面的一些.Rprofile建议,这似乎实现了我的想法。

> knitr::kable(head(iris))

| Sepal.Length| Sepal.Width| Petal.Length| Petal.Width|Species |
|------------:|-----------:|------------:|-----------:|:-------|
|          5.1|         3.5|          1.4|         0.2|setosa  |
|          4.9|         3.0|          1.4|         0.2|setosa  |
|          4.7|         3.2|          1.3|         0.2|setosa  |
|          4.6|         3.1|          1.5|         0.2|setosa  |
|          5.0|         3.6|          1.4|         0.2|setosa  |
|          5.4|         3.9|          1.7|         0.4|setosa  |

我最近遇到了同样的问题,遇到了 huxtable 包。它非常灵活,可能只是为了更好的控制台输出而有点矫枉过正,但它对我来说非常有用。

以下是使用 huxtable 解决问题的方法:

library(huxtable)
library(magrittr)

small_iris <- iris[1:5, ]

iris_hux <- 
  hux(small_iris) %>% 
  add_colnames() %>% 
  set_bold(row = 1, col = everywhere, value = TRUE) %>% 
  set_all_borders(TRUE)

我认为所有的功能都是不言而喻的。有关详细介绍,请参阅 https://hughjonesd.github.io/huxtable/huxtable.html#adding-row-and-column-names.

print_screen(iris_hux) 产生此输出(在控制台中!):

我还没有想出如何隐藏列名称的底部信息。所以如果有人知道,请评论!

编辑: 为了抑制底部的列名,在 print_screen().

中使用 colnames = FALSE

如果您也愿意将输出打印到 (RStudio) 查看器窗格而不是控制台,我建议您使用 DT 包。

library(DT)
datatable(iris)

我认为这有几个优点:输出很漂亮 well-arranged,该包能够显示大数据帧而不会变得笨重,并且可以高度自定义启动。

tibbles 在控制台中以彩色格式打印:

library(tidyverse)

x <- as_tibble(mtcars)
x