【问题标题】:Dynamic Greek Letters as Variable Names in RMarkdown Tables动态希腊字母作为 RMarkdown 表中的变量名称
【发布时间】:2014-07-04 02:02:29
【问题描述】:

我如何让 xtable(虽然我也有这个问题与 pander.table)在打印函数中将希腊字母分配给数据框的列,而无需渲染表格,然后手动输入 Latex 的希腊字母?

这是一个可重现示例的数据:

#data in 
chiSq <- 1600
df <- 850
p <- 0.95
CFI <- 0.95
TLI <- 0.95 
RMSEA <- 0.04
LOWRMSEA <- 0.03
HIGHRMSEA <- 0.04

我通常有一些看起来像这样的数据框。

fit.stat <- data.frame(chiSq, df, p, CFI, TLI, RMSEA, LOWRMSEA, HIGHRMSEA)

以下是我在使用 xtable 制作数据框表格时经常遇到的一些具体问题:

  • 我想做的是将 chiSq 更改为卡方符号。在乳胶中,$x^2$ 将呈现适当的符号。
  • 我还需要 p 为斜体。
  • 最后,LOWRMSEA 和 HIGHRMSEA 是上限和下限,我希望它们删除列名并将数据包含在 RMSEA 列中,就像置信区间一样。

我发现这样做的唯一方法是先用这个命令打印表格

library(xtable)
print(xtable(fit.stat, caption = "Model Fit Information for CFA"), 
caption.placement="top",
type = "latex")

产生这个:

\begin{table}[ht]
\centering
\caption{Model Fit Information for CFA}
\begin{tabular}{rrrrrrrrr}
  \hline
 & chiSq & df & p & CFI & TLI & RMSEA & LOWRMSEA & HIGHRMSEA \\ 
  \hline
1 & 1600.00 & 850.00 & 0.95 & 0.95 & 0.95 & 0.04 & 0.03 & 0.04 \\ 
   \hline
\end{tabular}
\end{table}

但是,我需要手动编辑表格来创建它:

\begin{table}[ht]
\centering
\caption{Model Fit Information for CFA}
\begin{tabular}{rrrrrrrrrrrr}
  \hline
 & $x^2$ & {\it df} & {\it p} & CFI & TLI & RMSEA\\ 
  \hline
&1600.00 & 850.00 & 0.00 & 0.95 & 0.95 & 0.04 (0.03 - 0.04) \\ 
   \hline
\end{tabular}
\end{table}

我希望能够在不手动编辑表格的情况下动态地执行此操作,以便我可以将其作为代码块包含在 markdown 文档中。 谢谢。

【问题讨论】:

  • 你能解释得更好吗?我在表格中使用希腊字母没有问题
  • 那么你的问题是“你应该手动编辑吗?”如果是这样,那对 SO 来说不是主题。如果您需要帮助编写代码以便不必进行这些编辑,您应该创建一个reproducible example 来说明问题并阐明所需的输出。

标签: r r-markdown reproducible-research


【解决方案1】:

就合并 RMSEA、LOWRMSEA 和 HIGHRMSEA 值而言,最好将其粘贴到 data.frame 中。例如

fit.stat <- data.frame(chiSq, df, p, CFI, TLI, 
    RMSEA = paste0(RMSEA , " (",LOWRMSEA," - ", HIGHRMSEA,")"))

然后对于列名,您可以通过指定自定义 sanitize 函数来覆盖 print.xtable 的清理功能。我相信你已经知道了,通常所有“特殊”的 LaTeX 字符都会被剥离或转义,以免干扰布局。但是,在这里我们可以创建一个函数来代替我们。首先,我们定义一个函数

formatcolheads<-function(x) {
    sanitize<-get("sanitize", parent.frame())
    x<-sanitize(x)
    x<-gsub("chiSq","$x^2$",x)
    x<-gsub("df","{\\\\it df}",x)
    x<-gsub("p","{\\\\it p}",x)
    x
}

请注意,我做了一些工作来获取默认的 sanitize 函数并在列上运行它,以确保没有任何问题。然后我开始替换您要更改的值。请注意,我们必须为“它的东西”添加双转义斜杠。但是我们使用这样的函数

print(xtable(fit.stat, caption = "Model Fit Information for CFA"), 
caption.placement="top", sanitize.colnames.function = formatcolheads,
type = "latex")

这会产生

\begin{table}[ht]
\centering
\caption{Model Fit Information for CFA} 
\begin{tabular}{rrrrrrl}
  \hline
 & $x^2$ & {\it df} & {\it p} & CFI & TLI & RMSEA \\ 
  \hline
1 & 1600.00 & 850.00 & 0.95 & 0.95 & 0.95 & 0.04 (0.03 - 0.04) \\ 
   \hline
\end{tabular}
\end{table}

这似乎是您想要的输出。

【讨论】:

  • +1。 @MrFlick:我想投票,但我需要等到我在这里足够长的时间才能启用该权限。这是一个很好的解决方案,它也应该与 pander.table 一起使用。您使用 sanitize 函数大大改进了我的可重现工作流程。
  • 注意,在您发布的解决方案中 x&lt;-gsub("chiSq","$x^2",x) 必须是 x&lt;-gsub("chiSq","$x^2$",x)。这是一个如此小的编辑所以不会让我为你修复它。再次感谢。
  • @bfoste01 好收获。我修好了。
猜你喜欢
  • 2021-10-31
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 2021-07-16
  • 2021-07-02
相关资源
最近更新 更多