2015-06-17 11 views
5

Próbuję dodać dość długą notatkę na dole tabeli utworzonej przez texreg; Chcę, żeby to się po prostu owijało, ale nie ma w tym żadnej funkcjonalności wbudowanej w tę funkcję.Pakowanie niestandardowych notatek na wyjściu texreg

Weźmy np .:

texreg(lm(speed~dist,data=cars), 
     custom.note=paste("%stars. This regression should be", 
         "intepreted with strong caution as", 
         "it is likely plagued by extensive", 
         "omitted variable bias")) 

Który, gdy kompilowany, daje coś takiego:

simple texreg

Formatowanie jest okropna; znacznie lepiej byłoby coś zastępując standardowe wyjście:

\multicolumn{2}{l}{\scriptsize{$^{***}p<0.001$, $^{**}p<0.01$, $^*p<0.05$. This regression should be intepreted with strong caution as it is likely plagued by extensive omitted variable bias}} 

Z bardziej strawnego Opakowanie:

\multicolumn{2}{l}{\scriptsize{$^{***}p<0.001$, $^{**}p<0.01$, $^*p<0.05$.}} \\ 
\multicolumn{2}{l}{\scriptsize{This regression should be intepreted with}} \\ 
\multicolumn{2}{l}{\scriptsize{strong caution as it is likely plagued by}} \\ 
\multicolumn{2}{l}{\scriptsize{extensive omitted variable bias}} 

Który daje wyjście znacznie bliżej do tego, co szukam:

preferred output

Czy istnieje sposób, aby to zrobić programowo?

Odpowiedz

1

Mogę wskazać czystą alternative solution I received, która może Cię zainteresować, najpóźniej, gdy musisz zaktualizować pakiet texreg.

Odpowiednio zwyczaj nuta kończy się \multicolumn w kodzie latex, więc nie możemy użyć polecenia podział wiersza jak par lub \\. Ale możemy osiągnąć automatyczną linię podziału z \parbox. Jeśli nadal potrzebujemy niestandardowego podziału linii, możemy użyć czterech ukośników odwrotnych: \\\\. Dla lepszego formatowania możemy użyć \\vspace{2pt} tylko na początku zawartości tekstowej:

texreg(lm(speed ~ dist, data = cars), 
     custom.note = ("\\parbox{.4\\linewidth}{\\vspace{2pt}%stars. \\\\ 
     This regression should be intepreted with strong caution as it is 
     likely plagued by extensive omitted variable bias.}")) 

enter image description here

+0

dzięki! Chciałbym zaktualizować moją odpowiedź; rzeczywiście "parbox" jest tym, czego używam w dzisiejszych czasach! – MichaelChirico

+0

Aby nadać GOF (tutaj: R²) więcej miejsca, możemy dodać '\ renewcommand \ arraystretch {1.3}' przed fragmentem '{r ...'. – jaySf

2

mam wymyślić obejście tej pory przez przepisanie funkcji texreg dodając custom.note.wrap argumentu i zmianę:

note <- paste0("\\multicolumn{", length(models) + 1, 
       "}{l}{\\", notesize, "{", custom.note, "}}") 
note <- gsub("%stars", snote, note, perl = TRUE) 

Do:

if (custom.note.wrap){ 
    note<-paste(paste0("\\multicolumn{", length(models) + 1L,"}{l}{\\",notesize,"{", 
        strwrap(custom.note, width=custom.note.wrap), "}}"), 
       collapse = " \\ \n") 
    note <- gsub("%stars", snote, note, perl = TRUE) 
}else{ 
    note <- paste0("\\multicolumn{", length(models) + 1L, 
       "}{l}{\\", notesize, "{", custom.note, "}}") 
    note <- gsub("%stars", snote, note, perl = TRUE) 
} 

Chodzi o to, aby odebrać maksymalnie długość łańcucha dla każdej linii (custom.note.wrap), a następnie podziel dostarczoną notatkę na ciągi co najwyżej tej długości, która kończy się spacją, ostatecznie łącząc wszystko w grupę multicolumn s dla każdego podzielonego podciągu.

To nie jest optymalna, jak byłoby lepiej dla texreg (aby mieć możliwość), aby automatycznie ustawić custom.note.wrap podane długości nazw modeli itp Ale moje surowe LaTeX umiejętności brakuje, więc nie jestem pewien jak bym to zrobił.

Powiązane problemy