Защищенное пространство и знак $ R для извлечения латекса - PullRequest
0 голосов
/ 30 октября 2018

Я делаю множественную регрессию по группам с помощью цикла. Я извлекаю только 1 коэффициент, к которому я прикрепляю звезды в соответствии с этим p-значением коэффи. Это пример моего кода:

for(i in 1:length(list)) {
    # Equation
    coef <- summary(lm(formula = var1 ~ var2 + var3 + var4,
                       data = subset(data.df, origin==var2[i])
                    ),
            )
    # extraction
    est     <- coef$coefficients[2,1]
    p       <- coef$coefficients[2,4]
    # Define notions for significance levels; spacing is important.
    mystars <- ifelse(p < .001, "***", 
               ifelse(p < .01 , "** ", 
               ifelse(p < .05 , "*  ",
               "   ")))
    # past stars after estimate - put it in the matrix
    est.mat[1,i] <- paste(sprintf('%.2f',est), mystars, sep = "", collapse = NULL)
    # drop useless objects
    rm(coef, est, t, p)
}

Это работает отлично. После этого я перевожу свою матрицу est.mat в латекс следующим образом:

print(xtable(est.mat, align = c("l","r","r","r","r","r","r"),
                              label = paste("tab:", file.name, sep = "", collapse = NULL),
                              caption = file.caption),
             type = "latex",
             size="\\normalsize",
             caption.placement = "top",
             file = paste("graphs/", file.name, ".tex", sep = "", collapse = NULL) 
     )

Отлично работает. Единственная проблема заключается в том, что после печати в PDF пустое пространство после звезд, определенных в «mystar», считается «несуществующим», и поэтому числа коэффициентов не выровнены, как показано ниже.

enter image description here

Тогда у меня вопрос: как я могу защитить это пространство в "mystar" ?

1 Ответ

0 голосов
/ 30 октября 2018

Один из способов сделать это - использовать «фантомные» звезды, которые занимают то же пространство, что и звезда, но ничего не отображают. Я верю, что эта модификация вашего кода сделает это:

mystars <- ifelse(p < .001, "***", 
           ifelse(p < .01 , "**\\phantom{*}", 
           ifelse(p < .05 , "*\\phantom{**}",
           "\\phantom{***}")))

Это всегда оставит место для трех звезд, так что вы можете захотеть сделать его немного изящнее, посмотрев сначала на весь столбец и выбрав, сколько фантомных звезд добавить, основываясь на большинстве звезд в столбце. Я оставлю это тебе.

Отредактировано для добавления: Как описано в При использовании xtable с R и Latex, математический режим в именах столбцов? , print.xtable не будет содержать макрос LaTeX, поэтому он будет отображаться в полученном PDF. Но вы можете сказать это не так, используя аргумент sanitize.text.function:

print(xtable(est.mat, align = c("l","r","r","r","r","r","r"),
                              label = paste("tab:", file.name, sep = "", collapse = NULL),
                              caption = file.caption),
             type = "latex",
             size="\\normalsize",
             caption.placement = "top",
             file = paste("graphs/", file.name, ".tex", sep = "", collapse = NULL), 
             sanitize.text.function = function(x) x
     )

Предполагается, что все записи в таблице являются допустимыми LaTeX. Если это не так, вам может потребоваться более сложная дезинфекция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...