Flextable :在数据框中使用上标

Flextable : using superscript in the dataframe

这个问题被问了几次,但令人惊讶的是,没有人回答。

我希望数据框中的一些数字以上标形式出现。 函数 composedisplay 在这里不适用,因为我还不知道数据框中的哪些值会出现在上标中(我的表是自动生成的)。

我尝试将 ^8^like 用于 kable$^-3$$paste(expression(10^2))"H\textsubscript{123}"

没有任何效果!!帮助 !我拔头发...

library(flextable)
bab = data.frame(c( "10\textsubscript{-3}", 
paste(as.expression(10^-3)), '10%-3%', '10^-2^' ))
flextable(bab)

我从 R 编织到 html。

在 HTML 中,您使用 <sup>-3</sup> 之类的东西来做上标,使用 <sub>-3</sub> 来做下标。但是,如果将它们放入 table 的单元格中,您将看到显示的全文,它不会被解释为 HTML,因为 flextable 转义了尖括号。

kable() 函数有一个参数 escape = FALSE 可以关闭它,但是 flextable 没有:见 https://github.com/davidgohel/flextable/issues/156。但是,有一种绕过此限制的 hackish 方法:将 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)
``` 

这会将 table 显示为

执行此操作时要小心:在您的真实 table 中可能存在您确实想要 HTML 转义的情况,此代码将在文档的其余部分禁用它。如果您在 R 会话中执行此代码,它将在会话的其余部分禁用转义。

如果您考虑在提交给 CRAN 的包中使用这样的文档,那就算了。您不应该在您希望其他人使用的代码中乱用这样的绑定。

编辑添加:

事实上,有一种方法可以在不使用上面给出的 hack 的情况下执行此操作。这篇文章中对此进行了描述:https://davidgohel.github.io/flextable/articles/display.html#sugar-functions-for-complex-formatting。这个想法是用 as_paragraphas_supas_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
```

这个肯定比我给的方法安全