В HTML вы делаете надстрочные знаки, используя такие вещи, как <sup>-3</sup>
, и подписки, используя <sub>-3</sub>
. Однако, если вы поместите их в ячейку таблицы, вы увидите полный текст, который будет отображаться, он не будет интерпретироваться как HTML, поскольку flextable
экранирует угловые скобки.
* kable()
Функция имеет аргумент escape = FALSE
, который может отключить это, но flextable
этого не делает: см. https://github.com/davidgohel/flextable/issues/156. Однако, есть хакерский способ обойти это ограничение: замените функцию htmlEscape()
на функцию, котораяничего не делает.
Например,
```{r}
library(flextable)
env <- parent.env(loadNamespace("flextable")) # The imports
unlockBinding("htmlEscape", env)
assign("htmlEscape", function(text, attribute = FALSE) text, envir=env)
lockBinding("htmlEscape", env)
bab = data.frame(x = "10<sup>-3</sup>")
flextable(bab)
```
Таблица будет отображаться как
Будьте осторожныесли вы сделаете это: в ваших реальных таблицах могут быть случаи, когда вы действительно хотите экранирование HTML, и этот код отключит это для остальной части документа. Если вы выполните этот код в сеансе R, он отключит экранирование до конца сеанса.
И если вы думаете об использовании такого документа в пакете, который вы отправляете в CRAN, забудьте об этом. Вы не должны связываться с подобными привязками в коде, который, как вы ожидаете, будут использовать другие люди.
Отредактировано, чтобы добавить:
Фактически, есть способ сделатьэто без взлома, приведенного выше. Это описано в этой статье: https://davidgohel.github.io/flextable/articles/display.html#sugar-functions-for-complex-formatting. Идея состоит в том, чтобы заменить записи, для которых требуются верхние индексы или индексы, вызовами as_paragraph
, as_sup
, as_sub
и т. Д.:
```{r}
library(flextable)
bab <- data.frame(x = "dummy")
bab <- flextable(bab)
bab <- compose(bab, part = "body", i = 1, j = 1,
value = as_paragraph("10",
as_sup("-3")))
bab
```
Это определенно безопаснее, чем метод, который я дал.