【问题标题】:Stargazer puts an additional $...$ around the minus sign of a negative numeric valueStargazer 在负数值的减号周围加上额外的 $...$
【发布时间】:2026-02-22 02:50:01
【问题描述】:

如果我想使用 stargazer 将 R 中的负数值输出到乳胶代码中,我会得到类似:

$$-$ 2$

Latex 无法处理,因为前两个美元符号之间没有空格。如果 stargazer 解释为负值,则会发生这种情况:

library("stargazer")
stargazer(-2, summary=F) # delete the minus sign to see the difference, it'll be: $2$

我怎样才能避免这种情况?乳胶完全可以得到 $- 2$ 并将其解释为数学,所以我怎样才能摆脱减号周围的那些额外的美元符号,或者作为一种解决方法,在两个美元符号之间添加一个空格?我的真实表当然很大,这使得手动更新不可行。

【问题讨论】:

    标签: stargazer


    【解决方案1】:

    设置 align = TRUE 应该可以解决您的问题。 Stargazer 然后使用 dcolumn 包并生成以下输出:

    > stargazer(c(-0.2, 1, -2), summary = FALSE, float = FALSE, header = FALSE, align = TRUE)
    
    \begin{tabular}{@{\extracolsep{5pt}} D{.}{.}{-3} D{.}{.}{-3} D{.}{.}{-3} } 
    \\[-1.8ex]\hline 
    \hline \\[-1.8ex] 
    -0.200 & 1 & -2 \\ 
    \hline \\[-1.8ex] 
    \end{tabular} 
    

    如果出于某种原因,您不能或不想使用 dcolumn 包,您也可以通过以下方式手动替换不需要的符号:

    t <- stargazer(c(-0.2, 1, -2), summary = FALSE, float = FALSE, header = FALSE, align = FALSE)
    t <- gsub("\\$\\$\\-\\$", "\\$\\-", t) # substitute unwanted behaviour
    write.table(t, row.names = FALSE, col.names = FALSE, quote = FALSE) # recreate latex table
    
    \begin{tabular}{@{\extracolsep{5pt}} ccc} 
    \\[-1.8ex]\hline 
    \hline \\[-1.8ex] 
    $-0.200$ & $1$ & $-2$ \\ 
    \hline \\[-1.8ex] 
    \end{tabular} 
    

    【讨论】:

    • 顺便说一句,使用“T”和“F”作为“TRUE”或“FALSE”的快捷方式是个坏主意。您可以将 T 重新定义为不同的东西(例如,样本中的句点数),从而引入难以追踪的错误。在某些时候,由于这个问题,我花了半天时间来追踪一个错误。