如何调整在R Markdown中使用Stargazer生成的表格大小?

14

我在代码块中加入了resize.height=0.5,resize.width=0.5,但仍无法调整stargazer生成的表格大小。有谁能告诉我原因?

我的代码块选项如下: echo=FALSE,warning=FALSE,results='asis',resize.height=0.5,resize.width=0.5}

stargazer代码如下:

stargazer(did.student,student.control.kmt,student.control.neu,student.control.dpp,header = FALSE,
          title="DD Model",
          covariate.labels = c("Treatment","group","Treatment*group"),
          dep.var.labels = "attitude",
          column.labels   = c("","party1","Independent","party2"),
          label = "DiD-students")

希望能得到任何帮助!

--
忘了提一下 - 我正在使用带表格的beamer。

5个回答

7

我自己解决了这个问题:

要使用 stargazer 调整表格大小,你可以改变字体大小 font.size=,使 Stargazer 单行显示 single.row = TRUE,并在 stargazer() 中更改列之间的距离 column.sep.width = "1pt"

虽然这里的链接建议使用 print(stargazer(),scalebox='0.7'),但这对我不起作用,也许是因为我正在使用带有 Beamer 的 Markdown,但我不确定。仍然很想在这方面得到更多贡献。

我希望能得到更直接的答案,但这个方法也有效!


4
这个GitHub评论 激发了我将 \resizebox{} 实现到 stargazer() 中。您可以使用 resizebox.stargazer() 通过 tab.width 和/或 tab.height 参数指定从 stargazer() 输出的表格的大小。要激活此功能,您需要首先运行以下代码:
resizebox.stargazer = function(..., tab.width = "!", tab.height = "!"
                               ){
  #Activate str_which() function:
  require(stringr) 

  #Extract the code returned from stargazer()
  res = capture.output(
    stargazer::stargazer(...)
    )

  #Render the arguments:
  tab.width = tab.width
  tab.height = tab.height

  #Attach "}" between \end{tabular} and \end{table}
  res = 
    prepend(res, "}", before = length(res))

  #Input \resizebox before \begin{tabular}
  res = 
    c(res[1:str_which(res, "^\\\\begin\\{tabular\\}.*")-1],
      paste0("\\resizebox{",tab.width,"}{",tab.height,"}{%"),
      res[str_which(res, "^\\\\begin\\{tabular\\}.*"):length(res)]
      )

  #Produce the whole strings
  cat(res, sep = "\n")
}

您可以通过 resizebox.stargazer(..., tab.width = "0.7\\textwidth") 来指定表格大小。请注意,您必须从 \\ 而不是 \ 写入 TeX 命令。


谢谢!这太棒了。但是,似乎未修改的文本会进入输出文件。例如,定义 out = output.tex 并不能产生缩放后的表格,而是原始表格。 - Antti

4

我将遵循 @yuan-ning 并操作 stargazer 的选项。尝试以下内容以获得 R markdown 的 PDF 输出:

stargazer(model_1, model_2, model_3, model_4, model_5,
          type = 'latex',
 
          header=FALSE, # to get rid of r package output text

          single.row = TRUE, # to put coefficients and standard errors on same line

          no.space = TRUE, # to remove the spaces after each line of coefficients

          column.sep.width = "3pt", # to reduce column width

          font.size = "small" # to make font size smaller

)

1
这里提供了一种替代Carlos解决方案的方法,可以将输出写入LaTeX文件中:
mkTexTable <- function(..., file){

    tbl <- capture.output({
        stargazer(...)
    })    

    tbl <- gsub("\\begin{tabular}", "\\resizebox{\\textwidth}{!}{\\begin{tabular}", tbl, fixed = T)
    tbl <- gsub("\\end{tabular}", "\\end{tabular}}", tbl, fixed = T)

    fileConn <- file(file)
    writeLines(tbl, fileConn)
    close(fileConn)
}

mkTexTable(lm1, lm2, "texOutput.tex")

这篇文章还提供了一些帮助:https://dev59.com/DYjca4cB1Zd3GeqPrxx4#36018251


0
如果问题涉及到html Rmd文件,你应该在代码块的开始处指定{r, results='asis'},然后在stargazer中使用type='html'。这对我起作用了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接