2015-06-17 9 views
5

Sto tentando di aggiungere una nota abbastanza lunga nella parte inferiore di una tabella creata da texreg; Voglio che ciò avvenga semplicemente, ma non sembra esserci alcuna funzionalità incorporata nella funzione per farlo.Inserimento di note personalizzate nell'output di texreg

Prendere, ad es .:

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")) 

che, una volta compilato, dà qualcosa di simile:

simple texreg

La formattazione è atroce; Molto meglio sarebbe qualcosa di simile a sostituire lo standard output:

\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}} 

Con involucro più digeribile:

\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}} 

che dà uscita molto più vicino a quello che sto cercando:

preferred output

C'è un modo per farlo in modo programmatico?

risposta

1

Potrei indicare un pulito alternative solution I received che potrebbe interessarti, al più tardi quando è necessario aggiornare il pacchetto texreg.

Di conseguenza, la nota personalizzata termina con \multicolumn nel codice LaTeX, pertanto non è possibile utilizzare comandi di interruzione di riga come par o \\. Ma possiamo raggiungere l'interruzione di linea automatica con \parbox. Se vogliamo ancora un'interruzione di riga personalizzata, possiamo utilizzare quattro backslash \\\\. Per la formattazione meglio possiamo utilizzare \\vspace{2pt} solo all'inizio del contenuto del testo:

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

grazie! Ho intenzione di aggiornare la mia risposta; anzi 'parbox' è quello che sto usando io stesso in questi giorni! – MichaelChirico

+0

Per dare più spazio ai GOF (qui: il R²), possiamo aggiungere '\ renewcommand \ arraystretch {1.3}' proprio prima del blocco '{r ...'. – jaySf

2

mi è venuta in mente una soluzione finora riscrivendo la funzione texreg con l'aggiunta di un argomento custom.note.wrap e cambiando:

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

A:

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) 
} 

L'idea è quella di scegliere un massimo lunghezza della stringa per ogni riga (custom.note.wrap) e quindi dividere la nota fornita in stringhe al massimo della lunghezza che termina in uno spazio, concatenando infine tutto in un gruppo di multicolumn s con ciascuna sottostringa divisa.

Questo non è ottimale, in quanto sarebbe stato meglio per texreg (di avere la capacità) per impostare automaticamente custom.note.wrap data la lunghezza dei nomi dei modelli, ecc Ma le mie prime LaTeX capacità mancano, quindi non sono sicuro come lo farei.