You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I've been trying to modify tibble printing of the red colour of negative values to a green colour of three specific columns when column values exceed 1, for my specific tibble-extended class
My closest attempt was very ad-hoc, with a strsplit on whitespace in setup$body, to find the right column and manually add a glue_col on the specific columns. But splitting on whitespace does not work well, some rows have extra whitespace in the beginning of the row, shifting the column that receives the color.
I imagine a more proper solution would operate earlier in the code, somewhere where the body is created. Do you have any pointers, or could you add an additional example on how to modify the body with conditional colouring of values above say 1, in one or two columns?
The text was updated successfully, but these errors were encountered:
Edit: I just noticed that you have quite a bit of docs that I had not read. Feel free to close this, I'll open a new issue if I have more specific questions later on, sorry for bothering you prematurely.
Thanks for the answer,
Here's some code, using capture.output and gluing in some red where it's wanted. Some NAs that can be fixed, but for instance, the indentation of columns breaks down with this approach.
The essence is that I'd like to use the very nice printing that regular tibbles have, but add some colour to some places in it, similar to the red negative values. From the docs, I imagine there might be a way through modifying the body related functions in pillar, and was hoping for some helpful pointers on which function to modify, or even better, if an example in this general direction could be added in the vignette.
mtcars|>tibble::as_tibble() |># Capture the default tibble printing
(\(x){utils::capture.output(print(x))})() |># Split by row
(\(x){split(x, f=1:length(x))})() |>purrr::walk(\(x){
# Split by wsrow_as_vector<-purrr::list_c(strsplit(x, " +"))
# Take the hp columnhp_value<- suppressWarnings(as.numeric(row_as_vector[6]))
# Colour red when hp is above 100if(is.numeric(hp_value)){
row_as_vector[6] <- ifelse(100< as.numeric(hp_value), paste0("{red ", hp_value, "}"), hp_value)
}
# Print with glue_col
print(glue::glue_col(paste0(row_as_vector, collapse="")))
})
Dear @krlmlr or anyone else who knows,
I've been trying to modify tibble printing of the red colour of negative values to a green colour of three specific columns when column values exceed 1, for my specific tibble-extended class
As I understand it, this would imply a modification of the "body". Sadly, I couldn't really understand how to proceed examining the body-example provided in the vignette: https://cran.r-project.org/web/packages/pillar/vignettes/extending.html
My closest attempt was very ad-hoc, with a strsplit on whitespace in setup$body, to find the right column and manually add a glue_col on the specific columns. But splitting on whitespace does not work well, some rows have extra whitespace in the beginning of the row, shifting the column that receives the color.
I imagine a more proper solution would operate earlier in the code, somewhere where the body is created. Do you have any pointers, or could you add an additional example on how to modify the body with conditional colouring of values above say 1, in one or two columns?
The text was updated successfully, but these errors were encountered: