代码之家  ›  专栏  ›  技术社区  ›  Marcos Vinicius

更改小数点使stargazer在数字之间增加了一个空格

  •  4
  • Marcos Vinicius  · 技术社区  · 8 年前

    我在用图书馆 stargazer 要在中生成表 latex (Rstudio/knitr/Sweave)。
    我需要将小数分隔符改为逗号(“,”),并将函数 stargazer() 大多数时候都有效。仅当选项 summary = false 结果在数字之间有一个额外的空格。
    有人知道如何克服这个问题吗?

    <<results='asis'>>=
    library(stargazer)
    set.seed(0)
    x = matrix(rnorm(3),nrow = 1)
    y = matrix(rnorm(9),nrow = 3)
    
    stargazer(x,summary=FALSE)
    stargazer(x,summary=FALSE,decimal.mark = ",")
    stargazer(y,summary=TRUE,decimal.mark = ",")
    @
    

    Table 2 always shows a extra space between the comma and the first decimal place. Table 3 shows good results

    1 回复  |  直到 8 年前
        1
  •  5
  •   Community Neeleshkumar S    7 年前

    检查生成的TEX时,很明显 stargazer 不在逗号后添加任何空格。问题出在其他地方:

    这个问题的根源是LaTeX没有认识到 , 默认情况下作为十进制分隔符。因此,在数学模式下,LaTeX在每个 , 。描述了此问题 here on TEX.SE 解决方案是包括 icomma 包裹

    \documentclass{article}
    \usepackage{icomma}
    \begin{document}
    <<results='asis', echo=FALSE, message = FALSE>>=
    library(stargazer)
    set.seed(0)
    x = matrix(rnorm(3),nrow = 1)
    y = matrix(rnorm(9),nrow = 3)
    
    stargazer(x,summary=FALSE)
    stargazer(x,summary=FALSE,decimal.mark = ",")
    stargazer(y,summary=TRUE,decimal.mark = ",")
    @
    \end{document}
    

    Output with icomma


    还有一个问题:为什么问题在表3中看不到?这是因为 天文学家 在表中使用不一致的数学标记。表2中的第二个单元格包含 $$-$0,326$ 而第2行,表3的最后一列包含 $-$0,006 在第一种情况下,数字本身处于数学模式,导致上述行为。(不幸的是 - 处于文本模式,导致排版错误。)在第二种情况下,数字处于文本模式,不添加额外的空格。

    为了克服负号格式错误的问题,我建议使用 xtable 而不是 天文学家 用于简单(非摘要)表。结合在数学模式下设置列的自定义列类型,结果是:

    Output with icomma and xtable

    \documentclass{article}
    \usepackage{icomma}
    \usepackage{tabularx}
    \newcolumntype{R}{>{$}r<{$}} % like an "r" column but in math mode
    \begin{document}
    <<results='asis', echo=FALSE>>=
    library(xtable)
    set.seed(0)
    x = matrix(rnorm(3),nrow = 1)
    
    print.xtable(
      xtable(x, caption = "", align = rep("R", 4)),
      include.rownames = FALSE,
      include.colnames = FALSE,
      format.args = list(decimal.mark = ","),
      caption.placement = "top")
    @
    \end{document}