2017-01-12 3 views
2

У меня возникли проблемы с изменением цвета фона thead с помощью пакета htmlTable в R. Играя с параметрами css.cell, я смог изменить цвет части таблицы заголовок, но не все (фрагмент кода запуска).Изменить цвет заголовка таблицы с помощью htmlTable

require(htmlTable) 
mat <- matrix(1:20, ncol=5) 

htmlTable(mat,cgroup = c("","Rank",""),n.cgroup = c(1,3,1), 
     header = LETTERS[1:5], 
     css.cell = rbind(rep("background: lightgrey;", 
          times=ncol(mat)), 
         matrix("", ncol=ncol(mat), nrow=nrow(mat)))) 

# Not Run 
# x = htmlTable(mat,cgroup = c("","Rank",""),n.cgroup = c(1,3,1), 
#    header = LETTERS[1:5], 
#    css.cell = rbind(rep("background: lightgrey;", 
#        times=ncol(mat)), 
#        matrix("", ncol=ncol(mat), nrow=nrow(mat)))) 
# get the output 
# as.character(x) 

Выход из кода получается следующий

<table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;'>\n 
 
    <thead>\n 
 
    <tr>\n 
 
     <th colspan='1' style='font-weight: 900; border-top: 2px solid grey; text-align: center;'></th> 
 
     <th style='border-top: 2px solid grey;; border-bottom: hidden;'>&nbsp;</th>\n 
 
     <th colspan='3' style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: center;'>Rank</th> 
 
     <th style='border-top: 2px solid grey;; border-bottom: hidden;'>&nbsp;</th>\n 
 
     <th colspan='1' style='font-weight: 900; border-top: 2px solid grey; text-align: center;'></th>\n</tr>\n 
 
    <tr>\n 
 
     <th style='background: lightgrey; border-bottom: 1px solid grey; text-align: center;'>A</th>\n 
 
     <th style='border-bottom: 1px solid grey;' colspan='1'>&nbsp;</th>\n 
 
     <th style='background: lightgrey; border-bottom: 1px solid grey; text-align: center;'>B</th>\n 
 
     <th style='background: lightgrey; border-bottom: 1px solid grey; text-align: center;'>C</th>\n 
 
     <th style='background: lightgrey; border-bottom: 1px solid grey; text-align: center;'>D</th>\n 
 
     <th style='border-bottom: 1px solid grey;' colspan='1'>&nbsp;</th>\n 
 
     <th style='background: lightgrey; border-bottom: 1px solid grey; text-align: center;'>E</th>\n</tr>\n</thead>\n 
 
    <tbody>\n 
 
    <tr>\n 
 
     <td style='text-align: center;'>1</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>5</td>\n 
 
     <td style='text-align: center;'>9</td>\n 
 
     <td style='text-align: center;'>13</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>17</td>\n</tr>\n 
 
    <tr>\n 
 
     <td style='text-align: center;'>2</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>6</td>\n 
 
     <td style='text-align: center;'>10</td>\n 
 
     <td style='text-align: center;'>14</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>18</td>\n</tr>\n 
 
    <tr>\n 
 
     <td style='text-align: center;'>3</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>7</td>\n 
 
     <td style='text-align: center;'>11</td>\n 
 
     <td style='text-align: center;'>15</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>19</td>\n</tr>\n 
 
    <tr>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>4</td>\n 
 
     <td style='border-bottom: 2px solid grey;' colspan='1'>&nbsp;</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>8</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>12</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>16</td>\n 
 
     <td style='border-bottom: 2px solid grey;' colspan='1'>&nbsp;</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>20</td>\n</tr>\n</tbody>\n</table>

Очевидно, что "\ п" выход раздражает, но легко управляемым. Но есть ли у кого-нибудь идеи о том, как управлять цветом фона в заголовке таблицы непосредственно из R?

Я знаю, что я могу настроить стиль ада вручную, добавив следующее к выходу html: style = "background-color: lightgrey;", но было бы очень приятно, если бы я мог просто получить желаемый результат непосредственно из R .

Вот мой желаемый результат таблицы, когда я вручную изменить цвет фона в THEAD:

<table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;'>\n 
 
    <thead style="background-color: lightgrey;">\n 
 
    <tr>\n 
 
     <th colspan='1' style='font-weight: 900; border-top: 2px solid grey; text-align: center;'></th> 
 
     <th style='border-top: 2px solid grey;; border-bottom: hidden;'>&nbsp;</th>\n 
 
     <th colspan='3' style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: center;'>Rank</th> 
 
     <th style='border-top: 2px solid grey;; border-bottom: hidden;'>&nbsp;</th>\n 
 
     <th colspan='1' style='font-weight: 900; border-top: 2px solid grey; text-align: center;'></th>\n</tr>\n 
 
    <tr>\n 
 
     <th style='border-bottom: 1px solid grey; text-align: center;'>A</th>\n 
 
     <th style='border-bottom: 1px solid grey;' colspan='1'>&nbsp;</th>\n 
 
     <th style='border-bottom: 1px solid grey; text-align: center;'>B</th>\n 
 
     <th style='border-bottom: 1px solid grey; text-align: center;'>C</th>\n 
 
     <th style='border-bottom: 1px solid grey; text-align: center;'>D</th>\n 
 
     <th style='border-bottom: 1px solid grey;' colspan='1'>&nbsp;</th>\n 
 
     <th style='border-bottom: 1px solid grey; text-align: center;'>E</th>\n</tr>\n</thead>\n 
 
    <tbody>\n 
 
    <tr>\n 
 
     <td style='text-align: center;'>1</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>5</td>\n 
 
     <td style='text-align: center;'>9</td>\n 
 
     <td style='text-align: center;'>13</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>17</td>\n</tr>\n 
 
    <tr>\n 
 
     <td style='text-align: center;'>2</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>6</td>\n 
 
     <td style='text-align: center;'>10</td>\n 
 
     <td style='text-align: center;'>14</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>18</td>\n</tr>\n 
 
    <tr>\n 
 
     <td style='text-align: center;'>3</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>7</td>\n 
 
     <td style='text-align: center;'>11</td>\n 
 
     <td style='text-align: center;'>15</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>19</td>\n</tr>\n 
 
    <tr>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>4</td>\n 
 
     <td style='border-bottom: 2px solid grey;' colspan='1'>&nbsp;</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>8</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>12</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>16</td>\n 
 
     <td style='border-bottom: 2px solid grey;' colspan='1'>&nbsp;</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>20</td>\n</tr>\n</tbody>\n</table>

Добавлен бонус, если кто-нибудь знает, как избавиться от «\ п» вывода, который также будет очень полезен

ответ

2

Вы могли бы хотеть рассмотреть tableHTML для этого, потому что он добавляет полный контроль над CSS. tableHTML использует оператор трубы для команд цепи.

Использование данных:

library(tableHTML) 
mat %>% 
as.data.frame() %>% 
#tableHTML is the main function that creates the html table 
tableHTML(border = 0, rownames = FALSE, 
      second_header = list(c(1, 3, 1), c('', 'Rank', ''))) %>% 
#the add_css family of functions add CSS to the corresponding 
#parts of the table 
add_css_thead(list(c('background-color'), c('lightgrey'))) %>% 
add_css_table(list(c('text-align'), c('center'))) %>% 
add_css_row(css = list('border-top', '2px solid black'), rows = 1) %>% 
add_css_row(css = list('border-bottom', '1px solid black'), rows = 2) %>% 
add_css_row(css = list('border-bottom', '2px solid black'), rows = 6) %>% 
add_css_second_header(css = list('border-bottom', '1px solid black'), second_headers = 2) 

Что бы привести в таблице вы хотите, но без необходимости использовать хак для изменения tablehtml или любой другой пакет (или необходимости вручную справиться с /n с):

enter image description here

вы все еще можете изменить его дальше, если вы хотите. Если вам интересно, есть также онлайн-учебник here.

+0

Очень круто. – anotherFishGuy

+0

Учебник был очень полезен – anotherFishGuy

+0

Большое спасибо. Любая обратная связь более чем приветствуется :) – LyzandeR

1

Я не очень хорошо знаком с htmlTable в R, но вот решение переполнения с использованием пакета XML для управления выходом htmlTable.

require(htmlTable) 
mat <- matrix(1:20, ncol=5) 

tab <- htmlTable(mat,cgroup = c("","Rank",""),n.cgroup = c(1,3,1), 
     header = LETTERS[1:5], 
     css.cell = rbind(rep("background: lightgrey;", 
          times=ncol(mat)), 
         matrix("", ncol=ncol(mat), nrow=nrow(mat)))) 


library(XML) 

# Parse the HTML table and add the background color attribute 
doc <- htmlParse(tab) 
addAttributes(doc[['//thead']], 'style' = "background-color: lightgrey;") 

# Convert HTML DOM object to string 
html_str <- toString.XMLNode(doc) 

# Remove line escapes, as requested 
html_str <- gsub('\\\n', '', html_str) 

# Remove the DOCTYPE included by htmlParse() 
html_str <- gsub('<!DOCTYPE[^>]*>', '', html_str) 

cat(html_str) 

Он выводит HTML строку, которая создает нужную таблицу:

<html><body><table class="gmisc_table" style="border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;"><thead style="background-color: lightgrey;"><tr><th colspan="1" style="font-weight: 900; border-top: 2px solid grey; text-align: center;"></th><th style="border-top: 2px solid grey;; border-bottom: hidden;"> </th><th colspan="3" style="font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: center;">Rank</th><th style="border-top: 2px solid grey;; border-bottom: hidden;"> </th><th colspan="1" style="font-weight: 900; border-top: 2px solid grey; text-align: center;"></th></tr><tr><th style="background: lightgrey; border-bottom: 1px solid grey; text-align: center;">A</th><th style="border-bottom: 1px solid grey;" colspan="1"> </th><th style="background: lightgrey; border-bottom: 1px solid grey; text-align: center;">B</th><th style="background: lightgrey; border-bottom: 1px solid grey; text-align: center;">C</th><th style="background: lightgrey; border-bottom: 1px solid grey; text-align: center;">D</th><th style="border-bottom: 1px solid grey;" colspan="1"> </th><th style="background: lightgrey; border-bottom: 1px solid grey; text-align: center;">E</th></tr></thead><tbody><tr><td style="text-align: center;">1</td><td style="" colspan="1"> </td><td style="text-align: center;">5</td><td style="text-align: center;">9</td><td style="text-align: center;">13</td><td style="" colspan="1"> </td><td style="text-align: center;">17</td></tr><tr><td style="text-align: center;">2</td><td style="" colspan="1"> </td><td style="text-align: center;">6</td><td style="text-align: center;">10</td><td style="text-align: center;">14</td><td style="" colspan="1"> </td><td style="text-align: center;">18</td></tr><tr><td style="text-align: center;">3</td><td style="" colspan="1"> </td><td style="text-align: center;">7</td><td style="text-align: center;">11</td><td style="text-align: center;">15</td><td style="" colspan="1"> </td><td style="text-align: center;">19</td></tr><tr><td style="border-bottom: 2px solid grey; text-align: center;">4</td><td style="border-bottom: 2px solid grey;" colspan="1"> </td><td style="border-bottom: 2px solid grey; text-align: center;">8</td><td style="border-bottom: 2px solid grey; text-align: center;">12</td><td style="border-bottom: 2px solid grey; text-align: center;">16</td><td style="border-bottom: 2px solid grey;" colspan="1"> </td><td style="border-bottom: 2px solid grey; text-align: center;">20</td></tr></tbody></table></body></html>

+0

Отлично, спасибо большое! – anotherFishGuy

Смежные вопросы