Как заставить R выводить сценарии тела для форматирования HTML-таблиц, используя подход, аналогичный gvisTable?

Я хотел бы выяснить, как создавать отформатированные HTML-таблицы таким образом, чтобы не требовалось использование стилей, размещенных в заголовке HTML. я в целом уже спрашивал об этом вопросе, но получил один ответ, в котором упоминалось об использовании заголовка, и другой ответ, который включает использование pandoc (Обновление: см. внизу этого поста информацию о новом ответе, опубликованном после того, как был задан этот вопрос. Я хотел бы иметь функцию R, которая записывает все форматирование HTML, необходимое для форматированной таблицы HTML, в одном месте.

Недавно я играл с gvisTable, и он способен записывать всю необходимую информацию в одном месте:

Следующий код

```{r results='asis'}
simpleData <- data.frame(matrix(1:9, nrow=3))
tab2 <- gvisTable(simpleData, 
                   options=list(width = 600, height = 300))
print(tab2, "chart")
```

выведет следующее в документ R Markdown:

<!-- jsHeader -->
<script type="text/javascript" src="http://www.google.com/jsapi">
</script>
<script type="text/javascript">

// jsData 
function gvisDataTableID273f3d05cccd ()
{
  var data = new google.visualization.DataTable();
  var datajson =
[
 [
 1,
4,
7 
],
[
 2,
5,
8 
],
[
 3,
6,
9 
] 
];
data.addColumn('number','X1');
data.addColumn('number','X2');
data.addColumn('number','X3');
data.addRows(datajson);
return(data);
}

// jsDrawChart
function drawChartTableID273f3d05cccd() {
  var data = gvisDataTableID273f3d05cccd();
  var options = {};
options["allowHtml"] = true;
options["width"] =    600;
options["height"] =    300;

     var chart = new google.visualization.Table(
       document.getElementById('TableID273f3d05cccd')
     );
     chart.draw(data,options);


}


// jsDisplayChart 
function displayChartTableID273f3d05cccd()
{
  google.load("visualization", "1", { packages:["table"] }); 
  google.setOnLoadCallback(drawChartTableID273f3d05cccd);
}

// jsChart 
displayChartTableID273f3d05cccd()

<!-- jsFooter -->  
//-->
</script>

<!-- divChart -->

<div id="TableID273f3d05cccd"
  style="width: 600px; height: 300px;">
</div>

И когда это помещается в контекст, создается gvisTable. См. вторую таблицу в этом выводе.

Таким образом, простая функция R вывела весь необходимый HTML для создания довольно сложной таблицы. В конечном итоге я хотел бы иметь ту же степень контроля форматирования таблиц, что и в LateX, только для R Markdown. И было бы хорошо, если бы такие посты чаще появлялись в блогах, через синдикаты, в RSS-читалках и так далее, чтобы команды форматирования были в теле.

Вопросы

  • Можно ли использовать подход, аналогичный gvis (например, сценарии в теле HTML), для форматирования таблиц HTML (например, строк, форматирования ячеек, высоты и ширины ячеек, шрифтов и т. д.)?
  • Существуют ли какие-либо существующие функции R, поддерживающие создание таких таблиц?
  • Имеют ли смысл предположения этого вопроса, или есть какой-то другой способ достичь моих более широких целей точного форматирования таблицы HTML с помощью R Markdown?

Обновлять

Джо добавил ответ на мой предыдущий вопрос, где он упоминает три варианта (стиль в теле; javascript, который встраивает стиль в заголовок; и блоки стилей с заданной областью). Поэтому я думаю, что главный вопрос, который остается, заключается в том, существуют ли какие-либо интерфейсы для облегчения использования таких подходов с блоками кода R Markdown.


person Jeromy Anglim    schedule 05.06.2012    source источник
comment
Вы также получили ответ о том, что вы можете просто поместить CSS в блок стилей рядом с таблицей. Я как раз писал именно этот ответ, когда заметил, что на него уже был дан ответ. Что не так с этим решением для вашего Q1?   -  person Spacedman    schedule 05.06.2012
comment
Извиняюсь; этот ответ был добавлен после того, как я задал этот вопрос. Я обновил свой вопрос, чтобы больше сосредоточиться на реализации R.   -  person Jeromy Anglim    schedule 05.06.2012
comment
уценка должна просто передавать HTML. Так что просто вставьте блок стилей перед уценкой, которая генерирует таблицу (для этого см. package:xtable)   -  person Spacedman    schedule 05.06.2012


Ответы (1)


Из документов RStudio вы можете настроить knitr на использование пользовательской таблицы стилей, используя:

# Set Custom CSS
options(rstudio.markdownToHTML=
  function(inputFile, outputFile) {      
    require(markdown)
    markdownToHTML(inputFile, outputFile, stylesheet='custom.css')   
  }
) 

Просто замените stylesheet='custom.css' на путь к файлу вашей таблицы стилей.

Затем вы можете объединить xtable и print с опцией type="html" в чанке, и вы получите правильно отформатированную таблицу.

xtable также производит LaTeX, если это желательно.

person JBecker    schedule 16.12.2012