观星者选项:resizebox和label

4
有可能将resizebox加入到R中的stargazer吗?我试图创建一张太宽而无法适应页面的表格,即使在横向视角下也是如此。我手动将resizebox{\textwidth}{!} { \begin{tabular} \end{tabular} }添加到tex文件中,我喜欢它的外观。但是,我希望我的.Rnw文件是完整的,这样我就可以生成完美的pdf文件,而不需要对.tex文件进行额外的更改。
另外,由于stargazer包含\label{}但未指定标签,因此stargazer导致pdflatex输出多个警告。虽然这不影响pdf文件的创建,但当存在其他错误时,会导致混乱。
同样,我可以手动删除.tex文件中的这些行,或者为其指定标签名称。但是,我想告诉stargazer根本不要包含这行。

有人找到解决方案了吗?我也遇到了同样的问题。 - tim
我从未能找到更好的解决方案。 - Shffl
3个回答

5

虽然不是最佳解决方案,但你可以通过使用capture.output()gsub()手动操作stargazer生成的LaTeX代码。

table <- capture.output({ # Store the stargazer output in a string
  stargazer(iris, header=F) # e.g.
})
table <- gsub("\\begin{tabular}","\\resizebox{0.9\\textwidth}{!}{\\begin{tabular}", table,fixed=T)
table <- gsub("\\end{tabular}","\\end{tabular}}", table,fixed=T)
cat(table)

你可以将该过程提取为一个方法,如果你需要在多个地方使用它。

感谢@Nicolas提供这个聪明的答案。不过有一个小问题,我们如何将cat(table)文件导出为latex文件? - Jb_Eyd
根据你的设置而定,但是你应该将 cat(table) 放在你编写 stargazer(...) 的相同位置。例如,在 Rnw 文件中:<<table-code, echo=FALSE, cache=FALSE>>= cat(table) @ - Nicolas

1
为了回答你问题的第二部分,你可以使用 label 来标记表格。这样你就不必手动删除 .tex 文件中空的 \label{} 了。同时你也可以通过 \ref{your.table.label} 来引用你的表格。
stargazer(df, title = "Statistical Summary", label="your.table.label", table.placement = "H")

1
我发现最好的方法是将stargazer选项float设置为FALSE,然后使用cat()手动将scalebox放入float环境中,例如:
<< results='asis', echo = FALSE>>=

cat("\\begin{table}[!htbp]")
cat("\\centering")
cat("\\caption{OLS Regression Results by Metal Level}")
cat("\\label{OLS}")
cat("\\scalebox{.8}{")

stargazer(models$model1OLS,
          float = FALSE)

cat("}") # for the end of the scalebox
cat("\\end{table}")

@

请注意,您还需要手动标记、居中和添加表格标题。使用resizebox而不是scalebox几乎肯定可以实现此目的,但我没有尝试过。

这与Nicolas的方法非常相似。您是否发现其中一个比另一个更有优势? - Shffl
没有真正的优劣之分,只是在更多的打字成本下,代码稍微更易读(对我来说)。我与那些非常熟悉Latex但不熟悉R(大多数经济学家使用Stata)的人进行了相当数量的协作,我发现这种方式更容易解释清楚正在发生的事情。 - Cameron Ellis
对于R语言用户来说,这确实更易读,因此更可取。我想知道stargazer是否会在未来的版本中加入重新缩放选项(就像其他所有的LaTeX选项,如位置等一样已经实现了)。 - Fitzroy Hogsflesh

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