如何用颜色打印 R 数据框?
How to print a R dataframe with colors?
使用 crayon 包,可以创建彩色字符串:
library(crayon)
dat <- data.frame(X=c(yellow("foobar"), green("baz")), Y = cyan("qux"))
这里是编码后的dat
:
> dat
X Y
1 3[33mfoobar3[39m 3[36mqux3[39m
2 3[32mbaz3[39m 3[36mqux3[39m
使用 write.table
,可以获得 table 颜色:
但是对齐丢失了。如何获得对齐良好的彩色数据框?
colorDF 包允许在数据框中设置颜色,但不允许做我想做的。我想要的是能够在列中每次出现该词时将一个词 say 涂成红色。 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
为红色。
您可以使用 tibble
而不是 data.frame
,因为它可以很好地打印矢量,请参阅 vignette("pillar", package = "vctrs")
。
特别是:
You can get basic control over how a vector is printed in a tibble by providing a format() method
要回答您的问题,您可以创建一个扩展 character
的 function_red
class,请参阅 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)
使用 crayon 包,可以创建彩色字符串:
library(crayon)
dat <- data.frame(X=c(yellow("foobar"), green("baz")), Y = cyan("qux"))
这里是编码后的dat
:
> dat
X Y
1 3[33mfoobar3[39m 3[36mqux3[39m
2 3[32mbaz3[39m 3[36mqux3[39m
使用 write.table
,可以获得 table 颜色:
但是对齐丢失了。如何获得对齐良好的彩色数据框?
colorDF 包允许在数据框中设置颜色,但不允许做我想做的。我想要的是能够在列中每次出现该词时将一个词 say 涂成红色。 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
为红色。
您可以使用 tibble
而不是 data.frame
,因为它可以很好地打印矢量,请参阅 vignette("pillar", package = "vctrs")
。
特别是:
You can get basic control over how a vector is printed in a tibble by providing a format() method
要回答您的问题,您可以创建一个扩展 character
的 function_red
class,请参阅 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)