正如其他人所指出的那样,问题出在covariate.labels参数中的特殊字符。然而,推荐的解决方案遗漏了一些内容:
- 对于LaTeX输出,您可以使用
\\
来“转义”特殊字符,以便它们正确显示。您还可以使用命令xtable::sanitize("Sexual_Disgust_std", type = "latex")
将字符串转换为更符合LaTeX的格式。在原始示例中,应该这样做:
`covariate.labels = c("Gender", "Sexual\\_Disgust\\_std")`
- 使用LaTeX输出时,一些特殊字符是数学符号,需要用数学模式语法括起来。比如,如果有两个协变量分别为%黑人和(%黑人)的平方,可以这样写:
`covariate.labels = c("\\% Black", "(\\% Black)$^2$")`
- 原始问题似乎是要写入一个
.htm
文件,但没有在stargazer中指定type='html'
,因此默认值将为type='latex'
。如果在latex和html输出之间切换,一些latex编码可能会破坏html生成。我不知道解决这个问题的优雅方法,但如果您正在使用R Markdown或Sweave的knitr
,您可以使用函数: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"
)
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")
)
stargazer(lm_1, lm_2, lm_3, lm_4,
type = star_format,
covariate.labels = covar_labels)
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)
}
使用相同的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("`", "'")
}