【问题标题】:Print pretty data.frames/tables to console将漂亮的 data.frames/tables 打印到控制台
【发布时间】:2015-11-29 05:35:17
【问题描述】:

有没有办法以更易读的方式将小号 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,它会占用不必要的时间,但如果可以选择,我希望能够以更有条理的方式查看小帧。

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

谢谢

【问题讨论】:

  • View(iris[1:5,]) 怎么样?
  • 你试过dplyr包吗?它有tbl_df 函数可以转换为Hadley Wickham 所说的本地data.frame。它应该(并且确实,IMO)在打印到控制台时提供更多结构化和可读性的输出。但它不提供字段之间的分隔符。
  • 是的,我都用过。而且我希望它打印控制台,因为我需要以交互方式更改两个表之间的一些值,这涉及到对约 250 个值的文本解释,所以我只是想让它更易于管理。我也在大部分情况下使用data.table - 我发现它的输出比dplyr 更可取。

标签: r printing console dataframe


【解决方案1】:

如果它对任何人有帮助,我只是偶然发现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  |

【讨论】:

  • 从 knitr 1.16 开始,不再是这种情况(即,它不再是漂亮的打印件)。 @yihui - 有什么想法吗?
  • @Shantanu 使用 knitr_1.17 为我工作
  • @G5W 感谢您的报告。我意识到这个问题与 Rmd 块有关。在 RStudio 中,创建一个新的 Rmd 文件,执行一个块(任何块),然后运行 ​​knitr::kable(head(iris))。输出现在看起来不太干净(例如,它包括 attr(,"format") attr(,"class") attr(,"knit_cacheable") 等)
  • 您现在可以使用 format 参数更改打印格式。例如,上表将打印为knitr::kable(head(iris), format = "markdown")
【解决方案2】:

我最近遇到了同样的问题,遇到了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

【讨论】:

  • 请注意,通常您不需要使用print_screen:只评估iris_hux 会做同样的事情。
  • 有没有办法抑制科学记数法?这:选项(scipen = 999)不起作用
【解决方案3】:

您可以尝试几种方法。

  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。但是,如果你想要的只是漂亮的打印,这有点过头了。

【讨论】:

  • 我想要的只是漂亮的打印。无论如何,对象都是data.tables,因此默认打印为5 head5 tail 行。不过感谢pretty 关键字。似乎是一个更合适的标题。
  • 如果你想要漂亮的打印,那么创建一个名为print.data.table的函数。当数据表打印到屏幕上时,该函数将被执行。
【解决方案4】:

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

library(DT)
datatable(iris)

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

【讨论】:

    【解决方案5】:

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

    library(tidyverse)
    
    x <- as_tibble(mtcars)
    x
    

    【讨论】:

      猜你喜欢
      • 2013-07-31
      • 2011-09-29
      • 2018-09-08
      • 1970-01-01
      • 2011-11-02
      • 2015-03-02
      • 1970-01-01
      • 2013-06-21
      • 2021-06-22
      相关资源
      最近更新 更多