如何使用Rstudio中的stargazer解决“ if(nchar(text.matrix [r,c])> max.length [real.c]){中缺少错误,需要TRUE / FALSE的地方缺少值”?

时间:2019-01-09 15:47:16

标签: r stargazer

我正在尝试使用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)

以前有人遇到过吗?

2 个答案:

答案 0 :(得分:1)

问题似乎与在协变量名称中使用下划线有关。从他们中取出这些,它应该起作用。

答案 1 :(得分:0)

正如其他人所指出的那样,问题在covariate.labels参数中出现了特殊字符。但是,推荐的解决方案缺少一些东西:

  1. 使用乳胶输出,您可以使用\\来“转义”特殊字符,以便它们正确显示。您也可以使用命令xtable::sanitize("Sexual_Disgust_std", type = "latex")将字符串转换为对乳胶更友好的内容。在原始示例中,将为:

    covariate.labels = c("Gender", "Sexual\\_Disgust\\_std")

  2. 使用乳胶输出时,某些特殊字符是数学字符,因此需要将其包含在数学模式语法中。例如,如果两个协变量是%黑色和(%Black)平方,则一个可能写为:

    covariate.labels = c("\\% Black", "(\\% Black)$^2$")

  3. 原始问题似乎是写入.htm文件中的,但未在注视机type = 'html'中指定,因此默认值为type = 'latex'。如果在乳胶和html输出之间切换,某些乳胶编码可能会中断html的生成。我不知道有解决此问题的理想方法,但是如果您将knitr与R Markdown或Sweave结合使用,则可以使用以下函数:knitr:: is_latex_output()knitr::is_html_output()生成乳胶或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      
    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)
    }
  1. 使用相同的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("`", "'") 
    }