столы уценки pander с трубами внутри обрабатываются некорректно

Я создаю таблицы уценки с помощью пакета pander R, в заголовках некоторых столбцов которых есть каналы (например: P> | t |). Кажется (если я что-то не упустил), что они не обрабатываются правильно ни pandoc, ни Rmarkdown из-за путаницы между разделителями столбцов и "истинными" каналами.

Рассмотрим следующий пример Rmd:

```{r  message = FALSE}
library(pander)
panderOptions("table.style" , "rmarkdown")
panderOptions("table.split.table" , Inf) # avoid to split the tables

data(iris)
mod <- lm(Sepal.Length ~ Species, data = iris)
```

```{r results='asis'}
pandoc.table(summary(mod)$coefficients[,-4])
```

```{r results='asis'}
pandoc.table(summary(mod)$coefficients)
```

Последняя таблица, созданная pander, выглядит так (обратите внимание на вертикальные черты в последнем имени столбца):

|                  &nbsp; |  Estimate  |  Std. Error  |  t value  |  Pr(>|t|)  |
|------------------------:|:----------:|:------------:|:---------:|:----------:|
|         **(Intercept)** |   5.006    |    0.0728    |   68.76   | 1.134e-113 |
|   **Speciesversicolor** |    0.93    |    0.103     |   9.033   |  8.77e-16  |
|    **Speciesvirginica** |   1.582    |    0.103     |   15.37   | 2.215e-32  |

Если я свяжу это с html (с помощью кнопки Rstudio, которая использует Rmarkdown для генерации HTML, если я не ошибаюсь), последняя таблица отображается не как таблица, а как обычный текст в выводе HTML.
Если я использую md, сгенерированный knitr, и преобразовать его в html с помощью pandoc, на выходе будет таблица, но имя последнего столбца станет "Pr (>".

Первая таблица без последнего столбца отображается правильно.


person Gilles    schedule 09.06.2013    source источник
comment
Было бы неплохо спросить в списке рассылки Pandoc или в системе отслеживания проблем, как избежать каналы с этим форматом / синтаксисом таблицы. Возможный обходной путь на данный момент - использование некоторых символов Unicode для реальных каналов.   -  person daroczig    schedule 10.06.2013


Ответы (1)


Вы можете экранировать трубы с помощью обратной косой черты (\|).

person John MacFarlane    schedule 10.06.2013
comment
Хорошо, спасибо, действительно работает. @daroczig: как вы думаете, сможете ли вы сменить сводника, чтобы справиться с этим? Я только что добавил: colnames(t) <- gsub("\\|", "\\\\|", colnames(t)) ; rownames(t) <- gsub("\\|", "\\\\|", rownames(t)) ; t <- gsub("\\|", "\\\\|", t) в вашу функцию pandoc.table.return (после части, применяющей функцию форматирования), и это сработало. Но, конечно, это потребует дополнительных испытаний. - person Gilles; 11.06.2013
comment
@Gilles - недавний коммит должен автоматически сбрасывать любые каналы, найденные в таблице, но пожалуйста, подтвердите. Любое спасибо (+1), Джон, за быстрый и действительно полезный ответ! - person daroczig; 12.06.2013
comment
Отлично, большое спасибо! Он отлично работает для pandoc. Но с knit2html и Rstudio таблицы по-прежнему отображаются неправильно, даже если каналы экранированы (я также пробовал с двойной обратной косой чертой). Может быть, проблема с пакетом уценки R? - person Gilles; 12.06.2013
comment
@Gilles - Тогда я подозреваю, что это проблема markdown pkg. Может быть, было бы неплохо спросить здесь: github.com/rstudio/markdown/ проблемы? state = open - person daroczig; 12.06.2013