Capture R output and replace with LaTeX code
Asked Answered
R

2

6

I'm trying to capture the output from some R code and replace it with latex code.

If you run this code:

library(stargazer)
x <- capture.output(stargazer(mtcars[1:5, 1:3], summary = FALSE, title="The main caption of the table."))

x

This is the output:

 [1] ""                                                                                                         
 [2] "% Table created by stargazer v.5.1 by Marek Hlavac, Harvard University. E-mail: hlavac at fas.harvard.edu"
 [3] "% Date and time: Sat, Jun 27, 2015 - 11:36:07"                                                            
 [4] "\\begin{table}[!htbp] \\centering "                                                                       
 [5] "  \\caption{The main caption of the table.} "                                                             
 [6] "  \\label{} "                                                                                             
 [7] "\\begin{tabular}{@{\\extracolsep{5pt}} cccc} "                                                            
 [8] "\\\\[-1.8ex]\\hline "                                                                                     
 [9] "\\hline \\\\[-1.8ex] "                                                                                    
[10] " & mpg & cyl & disp \\\\ "                                                                                
[11] "\\hline \\\\[-1.8ex] "                                                                                    
[12] "Mazda RX4 & $21$ & $6$ & $160$ \\\\ "                                                                     
[13] "Mazda RX4 Wag & $21$ & $6$ & $160$ \\\\ "                                                                 
[14] "Datsun 710 & $22.800$ & $4$ & $108$ \\\\ "                                                                
[15] "Hornet 4 Drive & $21.400$ & $6$ & $258$ \\\\ "                                                            
[16] "Hornet Sportabout & $18.700$ & $8$ & $360$ \\\\ "                                                         
[17] "\\hline \\\\[-1.8ex] "                                                                                    
[18] "\\end{tabular} "                                                                                          
[19] "\\end{table} " 

I need to replace line 5 with this:

"  \\caption[short caption]{The main caption of the table.} "

How can I do this?

Regrate answered 27/6, 2015 at 10:32 Comment(2)
x <- sub("\\caption{The main caption of the table.}", "\\caption[short caption]{The main caption of the table.}", fixed = TRUE, x) ?Bambara
@StevenBeaupré want to add that as an answer?Regrate
M
5

Try:

x <- sub("\\caption{The main caption of the table.}", 
         "\\caption[short caption]{The main caption of the table.}", fixed = TRUE, x)
Mccary answered 28/6, 2015 at 10:7 Comment(0)
S
0

This is a little different than what you had in mind, but perhaps you could just use xtable which has a caption.width argument, e.g.:

print.xtable(xtable(mtcars[1:5, 1:3],
                    caption="The main caption of the table"),
             caption.width="10cm",
             caption.placement="top")

The output will not port exactly to what you're going for, but maybe you could bend this to your purposes if you prefer the more concise code; from ?print.xtable:

The caption will be placed in a "parbox" of the specified width if caption.width is not NULL and type="latex". Default value is NULL.

Here's the output:

% latex table generated in R 3.1.3 by xtable 1.7-4 package
% Tue Jun 30 14:52:06 2015
\begin{table}[ht]
\centering
\parbox{5cm}{\caption{The main caption of the table}} 
\begin{tabular}{rrrr}
  \hline
 & mpg & cyl & disp \\ 
  \hline
Mazda RX4 & 21.00 & 6.00 & 160.00 \\ 
  Mazda RX4 Wag & 21.00 & 6.00 & 160.00 \\ 
  Datsun 710 & 22.80 & 4.00 & 108.00 \\ 
  Hornet 4 Drive & 21.40 & 6.00 & 258.00 \\ 
  Hornet Sportabout & 18.70 & 8.00 & 360.00 \\ 
   \hline
\end{tabular}
\end{table}

You'll also have to mess around with the other options (e.g., digits) to get the exact formatting of the rest of the table to match that from stargazer, depending on what exactly the formatting is that you had in mind.

Schlessel answered 30/6, 2015 at 18:55 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.