【问题标题】:How to print a R dataframe with colors?如何用颜色打印 R 数据框?
【发布时间】:2021-09-29 23:49:59
【问题描述】:

使用 crayon 包,可以创建彩色字符串:

library(crayon)
dat <- data.frame(X=c(yellow("foobar"), green("baz")), Y = cyan("qux"))

这里是编码的dat

> dat
                       X                   Y
1 \033[33mfoobar\033[39m \033[36mqux\033[39m
2    \033[32mbaz\033[39m \033[36mqux\033[39m

使用write.table,可以获得带有颜色的表格:

但是对齐丢失了。如何获得具有良好对齐的彩色数据框?

colorDF 包允许在数据框中设置颜色,但不允许做我想做的事。我想要的是能够在一列中每次出现该单词时将一个单词涂成红色。 colorDFdf_search 函数与我想要的很接近,但它会为找到图案的整个单元格着色,我只想为一个单词着色。

例如,在这个数据框中:

#                                file line              code
# 1                        folder/f.R    1 f <- function(x){
# 2              folder/subfolder/g.R    1 g <- function(y){
# 3 folder/subfolder/subsubfolder/h.R    1 h <- function(z){

我希望 code 列中的单词 function 为红色。

【问题讨论】:

标签: r dataframe ansi-colors crayon


【解决方案1】:

您可以使用tibble 而不是data.frame,因为它可以很好地打印矢量,请参阅vignette("pillar", package = "vctrs")

特别是:

您可以通过提供 format() 方法来基本控制矢量在 tibble 中的打印方式

要回答您的问题,您可以创建一个扩展characterfunction_red 类,请参阅vignette("s3-vector", package = "vctrs")

library(vctrs)

data <- read.table(text="file line code
'folder/f.R' 1 'f <- function(x){'
'folder/subfolder/g.R' 1 'g <- function(y){'
'folder/subfolder/subsubfolder/h.R' 1 'h <- function(z){'
",header=T)

function_red <- function(x = character()) {
  vec_assert(x, character())
  new_vctr(x, class = "vctrs_function_red")
}

format.vctrs_function_red <- function(x,...) {
  gsub("function",crayon::red("function"),vec_data(x))
}

data$code <- function_red(data$code)
tibble::tibble(data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 2011-03-07
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    相关资源
    最近更新 更多