如何用颜色打印 R 数据框?
Posted
技术标签:
【中文标题】如何用颜色打印 R 数据框?【英文标题】:How to print a R dataframe with colors? 【发布时间】: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 包允许在数据框中设置颜色,但不允许做我想做的事。我想要的是能够在一列中每次出现该单词时将一个单词涂成红色。 colorDF 的df_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
为红色。
【问题讨论】:
Miles McBain 今天在推特 (twitter.com/MilesMcBain/status/1421104940441907208?s=20) 上发布了一些关于 paint 软件包的信息——也许该软件包可以适应您的需求?或者colortable package 可以工作吗? 谢谢@jared_mamrot! colortable 看起来很有希望! 啊不,它会为整个单元格着色。 【参考方案1】:您可以使用tibble
而不是data.frame
,因为它可以很好地打印矢量,请参阅vignette("pillar", package = "vctrs")
。
特别是:
您可以通过提供 format() 方法来基本控制矢量在 tibble 中的打印方式
要回答您的问题,您可以创建一个扩展character
的function_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)
【讨论】:
以上是关于如何用颜色打印 R 数据框?的主要内容,如果未能解决你的问题,请参考以下文章