Figuras referenciadas abaixo Sou novo em R e RStudio, e acabei usando o pacote tableHTML porque parece uma boa opção para formatar meu dataframe. Tenho um dataframe (tibia_outliers_shortable) listando apenas os valores outliers baixos e altos para cada uma das várias variáveis em muitos assuntos, recortados aqui para uma variável em 9 assuntos. Quero alterar a cor de fundo das células com valores abaixo do "corte outlier baixo" para azul claro, e a cor de fundo das células com valores acima do "corte outlier alto" para vermelho.
Quando uso add_css_conditional_column() para alterar o fundo de células com valores altos, ele perde a célula com os valores mais altos - veja a Figura 1.
Se eu então executar o mesmo comando tableHTML() mas adicionar outra chamada para add_css_conditional_column() para destacar células com valores baixos, ele formata as células vazias (talvez as trate como zeros?) e também formata a célula de maior valor! Veja a Fig. 2.
patients <- c('PatNo 869','PatNo 885','PatNo 888','PatNo 1005','PatNo 1007','PatNo 1016','PatNo 1028','PatNo 1043','PatNo 1044')
vals = rbind("",427.3,978.3,"",423.2,967.4,"",1042.9,"")
tibia_outliers_shorter <- data.frame(vals,row.names = patients)
colnames(tibia_outliers_shorter) <- 'TotalArea'
lowhigh <- cbind(467.7,904.6) # These are the values determining which values are low vs. high outliers
# First attempt: Change background color of cells with high values to red
library(tableHTML)
tableHTML(tibia_outliers_shorter, caption = 'Outlier summary') %>%
add_css_caption(css = list(c('color','font-size'),c('darkblue','12px'))) %>%
add_css_conditional_column(conditional = ">", value = lowhigh[2], css = list('background-color','red'), columns = c("TotalArea")) %>%
tableHTML_to_image()
# Second attempt: Add this argument to same tableHTML command, for cell with low values
add_css_conditional_column(conditional = "<", value = lowhigh[1], css = list('background-color','lightblue'), columns = c("TotalArea")) %>%
Há duas coisas acontecendo aqui.
Você não tem números, sua
TotalArea
coluna é strings. Seu uso derbind("",427.3,978.3, ...)
está incorreto, quem quer que tenha sugerido essa maneira de fazer vetores ou colunas, descarte-a (e talvez leve outras coisas que eles dizem com um grão de sal). Como você misturou strings e números, eles são todos strings. UseNA
para vazio.Há algumas maneiras de contornar isso: use
NA
em vez de""
, e seus números permanecerão números. Além disso,rbind
não é necessário aqui, inclua-os nadata.frame
chamada.Infelizmente, isso causa um problema, pois
tableHTML
está quebrado em relação aosNA
valores:O aviso é desleixado, o erro é um bug.
Acho que você precisa registrar um relatório de bug com o mantenedor. Por exemplo, eu consigo fazer o acima funcionar quando eu removo os
NA
valores completamente:O erro
missing value where TRUE/FALSE needed
é um erro clássico quando umaif
declaração produzNA
(veja Erro em if/while (condição) {: valor ausente onde TRUE/FALSE necessário ). Acho que seus dados de exemplo e código aqui são suficientes para que o mantenedor consiga reproduzi-los, e a correção é apenas um código simples para verificar se há valores ausentes em vez de presumir cegamente que tudo não éNA
.(Aliás,
tableHTML(..., replace_NA="")
isso não resolve o problema.)(Talvez o autor também possa corrigir o aviso. Ele é informado pela emissão de
options(warnPartialMatchAttr=TRUE)
, um item essencial para programação defensiva. Na minha humilde opinião, esse tipo de aviso deveria ser obrigatório para envio ao CRAN... mas, novamente, alguns pacotes básicos também emitem esse aviso, então ninguém é perfeito :-)