2015-10-28 3 views
10

Я пытаюсь нам knitr напечатать кадр данных в виде таблицы с использованием xtable:как распечатать таблицу в knitr

```{r xtable,fig.width=10, fig.height=8, message=FALSE, results = 'asis', echo=FALSE, warning=FALSE, fig.cap='long caption', fig.scap='short',tidy=FALSE} 

print(xtable(d),format="markdown") 
``` 

Это данные кадра d:

d <- structure(list(Hostname = structure(c(8L, 8L, 9L, 5L, 6L, 7L, 
1L, 2L, 3L, 4L), .Label = c("db01", "db02", "farm01", "farm02", 
"tom01", "tom02", "tom03", "web01", "web03"), class = "factor"), 
    Date = structure(c(6L, 10L, 5L, 3L, 2L, 1L, 8L, 9L, 7L, 4L 
    ), .Label = c("10/5/2015 1:15", "10/5/2015 1:30", "10/5/2015 2:15", 
    "10/5/2015 4:30", "10/5/2015 8:30", "10/5/2015 8:45", "10/6/2015 8:15", 
    "10/6/2015 8:30", "9/11/2015 5:00", "9/11/2015 6:00"), class = "factor"), 
    Cpubusy = c(31L, 20L, 30L, 20L, 18L, 20L, 41L, 21L, 29L, 
    24L), UsedPercentMemory = c(99L, 98L, 95L, 99L, 99L, 99L, 
    99L, 98L, 63L, 99L)), .Names = c("Hostname", "Date", "Cpubusy", 
"UsedPercentMemory"), class = "data.frame", row.names = c(NA, 
-10L)) 

Все идеи Мне здесь не хватает?

+0

Я думаю, что вы пытались пытаться быть «pr int (xtable (d), type = "markdown") '. Когда вы используете аргумент 'format', частичное сопоставление присваивает его аргументу' format.args'. Если бы вы использовали аргумент 'type', вам было бы сказано в ошибке, что' xtable' поддерживает только HTML и LaTeX. Рекомендация Пьера использовать «knitr :: kable» - хорошая альтернатива. – Benjamin

ответ

12

Пробег: kable от knitr. Он отлично отформатирует таблицу.

enter image description here

Если вы хотели бы использовать xtable попробовать:

print(xtable(d), type="latex", comment=FALSE) 
+2

Это хороший +1. – akrun

+0

@Pierre Lafortune, мне удалось заставить его работать с этим: print (xtable (t), type = "latex"), но я также получаю это сообщение в файле pdf:% tablex table, сгенерированное в R 3.2.2, xtable 1.7-4 package% Wed Oct 28 12:42:49 2015, как вы не показываете сообщение? – user1471980

+0

В заголовке кода попробуйте установить echo = F и warning = F –

4

Хотя решение Пьера работает, это в идеале должно происходить автоматически. К счастью, вы можете использовать крючки для крюка, чтобы сделать эту работу.

То есть, учитывая этот код:

```{r} 
d 
``` 

Мы хотим knitr автоматически производить отформатированную таблицу, без необходимости вызова функции форматирования вручную.

Вот код, который я использую для этого. Вы должны поместить это в начале вашего knitr документа, или в коде, который компилируется документ:

opts_chunk$set(render = function (object, ...) { 
    if (pander_supported(object)) 
     pander(object, style = 'rmarkdown') 
    else if (isS4(object)) 
     show(object) 
    else 
     print(object) 
}) 

Это использует pander и дополнительно требует вспомогательной функции, pander_supported:

library(pander) 

pander_supported = function (object) 
    UseMethod('pander_supported') 

pander_supported.default = function (object) 
    any(class(object) %in% sub('^pander\\.', '', methods('pander'))) 

pander.table = function (x, ...) 
    pander(`rownames<-`(rbind(x), NULL), ...) 

Для более удобного форматирования я также использую эти значения по умолчанию:

panderOptions('table.split.table', Inf) 
panderOptions('table.alignment.default', 
       function (df) ifelse(sapply(df, is.numeric), 'right', 'left')) 
panderOptions('table.alignment.rownames', 'left') 
Смежные вопросы