我正在尝试使用 Stargazer 在 Rstudio 中打印组合 lm 表,但我不断收到此消息:
if (nchar(text.matrix[r, c]) > max.length[real.c]) { 中的错误:需要 TRUE/FALSE 的缺失值
这是我正在使用的代码:
stargazer(lm_1, lm_2, lm_3, lm_4,
dep.var.labels = c("PolOri_Social_std", "Sexual_Disgust_std"),
covariate.labels = c("Gender", "Sexual_Disgust_std"),
style = "demography",
out = "hierarchical.htm",
header = F)
Run Code Online (Sandbox Code Playgroud)
有没有人遇到过这个?
正如其他人指出的那样,问题是由 covariate.labels 参数中的特殊字符引起的。然而,推荐的解决方案忽略了一些事情:
\\“转义”特殊字符,以便它们正确显示。您还可以使用该命令xtable::sanitize("Sexual_Disgust_std", type = "latex")将字符串转换为对乳胶更友好的字符串。在原来的例子中,这将是:`covariate.labels = c("Gender", "Sexual\\_Disgust\\_std")`
Run Code Online (Sandbox Code Playgroud)
`covariate.labels = c("\\% Black", "(\\% Black)$^2$")`
Run Code Online (Sandbox Code Playgroud)
.htm文件,但未在 stargazer 中指定type = 'html',因此默认值为type = 'latex'. 如果在 Latex 和 html 输出之间切换,某些 Latex 编码可能会破坏 html 生成。我不知道这个问题有什么优雅的解决方案,但如果您使用knitrR Markdown 或 Sweave,您可以使用以下函数:knitr:: is_latex_output()或knitr::is_html_output()生成适当的 Latex 或 html 代码,如下所示: library(knitr)
library(dplyr)
library(stargazer)
star_format <- dplyr::case_when(
knitr::is_latex_output() ~ "latex",
knitr::is_html_output() ~ "html",
TRUE ~ "text" # for interactive coding in console
)
# One way would be to build latex / html specific labels
covar_labels <- dplyr::case_when(
knitr::is_latex_output() ~ c("Gender", "Sexual\\_Disgust\\_std"),
knitr::is_html_output() ~ c("Gender", "Sexual Disgust std"),
TRUE ~ c("Gender", "Sexual Disgust std")
)
# for simplicity, stargazer call doesn't include custom dep.var.labels or out arguments
stargazer(lm_1, lm_2, lm_3, lm_4,
type = star_format,
covariate.labels = covar_labels)
# A second way would be to create separate stargazer calls:
if(knitr::is_html_output()) {
stargazer(lm_1, lm_2, lm_3, lm_4,
type = star_format,
dep.var.labels = c("PolOri Social std", "Sexual Disgust std"),
covariate.labels = c("Gender", "Sexual Disgust std"),
style = "demography",
out = "hierarchical.html",
header = FALSE)
}
if(knitr::is_latex_output()) {
stargazer(lm_1, lm_2, lm_3, lm_4,
type = star_format,
dep.var.labels = c("PolOri\\_Social\\_std", "Sexual\\_Disgust\\_std"),
covariate.labels = c("Gender", "Sexual\\_Disgust\\_std"),
style = "demography",
out = "hierarchical.tex",
header = FALSE)
}
Run Code Online (Sandbox Code Playgroud)
knitr::is_latex_output()和knitr::is_html_output()函数,还可以使用正则表达式预处理任何标签,以专门格式化为 html 或 Latex 输出。例如,下面是一个小函数,可以搜索和替换各种特殊字符文本字符串。 library(stringr)
remove_special_chars <- function(covar_labels){
covar_labels %>%
str_replace_all("\\\\", "") %>%
str_replace_all("\\^", "") %>%
str_replace_all("_", " ") %>%
str_replace_all("\\$", "") %>%
str_replace_all("`", "'")
}
Run Code Online (Sandbox Code Playgroud)