[R] Printing/Generating/Outputting a Table (Not Latex)

Henrik Bengtsson
Wed, 10 Dec 2014 20:25:15 -0000

On Tue, Dec 9, 2014 at 3:11 PM, Henrik Bengtsson <hb at biostat.ucsf.edu>
wrote:
> I'm surprised no one mentioned alternatives to LaTeX, which is not
> necessarily installed on all systems and it's also quite a
> heavy-weight setup (100's-1000's MBs).  An alternative is to output
a
> table in Markdown or HTML and convert that to PDF.  The poor man's
> HTML-to-PDF is to manually open the HTML document in a modern web
> browser and simply "save as/print to" PDF.  For automatic
conversion,
> one can use Pandoc [http://johnmacfarlane.net/pandoc/], which is quick
> to install.
>
> There are several options to output a table in Markdown or HTML from a
> data.frame, e.g. xtable, knitr, rmarkdown.  Here's how you can do it
> using R.rsp + knitr::kable:
>
> Create the following RSP-embedded Markdown file 'table.md.rsp' (- -
-
> lines excluded):
> - - - BEGIN - - -
> <%
> R.utils::use("knitr")
> options(knitr.table.format="markdown")
> %>
>
> # A Table
> <%
> data <- head(datasets::iris)
> %>
>
> <%= kable(data) %>
>
> _Table: The first <%=nrow(data)%> entries of the iris dataset._
> - - - END - - -
>
> Then just run:
>
>> library("R.rsp")
>> html <- rfile("table.md.rsp")
>> !html
>
> and print/save as PDF in the browser. (*)
>
>
> If you've got Pandoc installed you can generate a PDF by making sure
> to use options(knitr.table.format="pandoc") and then:
>
>> library("R.rsp")
>> md <- rfile('table-pandoc.md.rsp', postprocess=FALSE)
>> pdf <- gsub("md$", "pdf", md)
>> system2("pandoc", args=c(normalizePath(md), "-o",
pdf))
>> !pdf

I was wrong about going down the Pandoc path; Pandoc in turn relies on
LaTeX for generating PDFs so that didn't solve anything:

  "For PDF output, you?ll also need to install LaTeX"
[http://johnmacfarlane.net/pandoc/installing.html]

I've also confirmed that Pandoc fails if 'pdflatex' is not
available.

If conversion to PDF from HTML can be done by other means (e.g.
manually in the browser), LaTeX can still be avoided.

Sorry about the noise.

/Henrik

>
> See also this Gist:
https://gist.github.com/HenrikBengtsson/f4e8f6fe2af5d6ccbed6
>
> /Henrik
>
> (*) For the lazy, to test the above HTML example "on the fly"
run:
>
source("http://callr.org/rfile#https://gist.githubusercontent.com/HenrikBengtsson/f4e8f6fe2af5d6ccbed6/raw/table.md.rsp")
>
>
>
> On Tue, Dec 9, 2014 at 1:02 PM, Prof Brian Ripley <ripley at
stats.ox.ac.uk> wrote:
>> On 09/12/2014 20:47, Richard M. Heiberger wrote:
>>>
>>> the last one is wrong.  That is the one for which I don't know
the
>>> right answer on linux.
>>>
>>> 'xdvi' displays dvi files.  you need to display a pdf file.
>>> whatever is the right program on linux to display pdf files is what
>>> belongs there.
>>>
>>> On Macintosh we can avoid knowing by using 'open', which
means use the
>>> system standard.
>>> I don't know what the linux equivalent is, either the exact
program or
>>> the instruction to use the standard.
>>
>>
>> xdg-open (but like OS X it depends on having the right associations
set).
>>
>>
>>>
>>> On Tue, Dec 9, 2014 at 3:36 PM, Kate Ignatius <kate.ignatius at
gmail.com>
>>> wrote:
>>>>
>>>> I set these options:
>>>>
>>>> options(latexcmd='pdflatex')
>>>> options(dviExtension='pdf')
>>>> options(xdvicmd='xdvi')
>>>>
>>>> Maybe one too many?  I'm running in Linux.
>>>>
>>>>
>>>>
>>>> On Tue, Dec 9, 2014 at 3:24 PM, Richard M. Heiberger <rmh at
temple.edu>
>>>> wrote:
>>>>>
>>>>> It looks like you skipped the step of setting the options.
>>>>> the latex function doesn't do pdflatex (by default it
does regular
>>>>> latex) unless you set the options
>>>>> as I indicated.
>>>>>
>>>>> On Tue, Dec 9, 2014 at 3:11 PM, Kate Ignatius
<kate.ignatius at gmail.com>
>>>>> wrote:
>>>>>>
>>>>>> Ah yes, you're right.
>>>>>>
>>>>>> The log has this error:
>>>>>>
>>>>>> ! LaTeX Error: Missing \begin{document}.
>>>>>>
>>>>>> Though can't really find much online on how to
resolve it.
>>>>>>
>>>>>> On Tue, Dec 9, 2014 at 1:15 PM, Jeff Newmiller
>>>>>> <jdnewmil at dcn.davis.ca.us> wrote:
>>>>>>>
>>>>>>> pdflatex appears to have run, because it exited.
You should look at
>>>>>>> the tex log file, the problem is more likely that
the latex you sent out to
>>>>>>> pdflatex was incomplete.
>>>>>>>
>>>>>>>
---------------------------------------------------------------------------
>>>>>>> Jeff Newmiller                        The     .....
.....  Go
>>>>>>> Live...
>>>>>>> DCN:<jdnewmil at dcn.davis.ca.us>
Basics: ##.#.       ##.#.  Live
>>>>>>> Go...
>>>>>>>                                        Live:
OO#.. Dead: OO#..
>>>>>>> Playing
>>>>>>> Research Engineer (Solar/Batteries            O.O#.
#.O#.  with
>>>>>>> /Software/Embedded Controllers)               .OO#.
.OO#.
>>>>>>> rocks...1k
>>>>>>>
>>>>>>>
---------------------------------------------------------------------------
>>>>>>> Sent from my phone. Please excuse my brevity.
>>>>>>>
>>>>>>> On December 9, 2014 8:43:02 AM PST, Kate Ignatius
>>>>>>> <kate.ignatius at gmail.com> wrote:
>>>>>>>>
>>>>>>>> Thanks!  I do get several errors though when
running on Linux.
>>>>>>>>
>>>>>>>> Running your code, I get this:
>>>>>>>>
>>>>>>>> Error in system(cmd, intern = TRUE, wait =
TRUE) :
>>>>>>>> error in running command
>>>>>>>>
>>>>>>>> Fiddling around with the code and running this:
>>>>>>>>
>>>>>>>> tmp <- matrix(1:9,3,3)
>>>>>>>> tmp.tex <- latex(tmp,
file='tmp.tex')
>>>>>>>> print.default(tmp.tex)
>>>>>>>> tmp.dvi <- dvi(tmp.tex)
>>>>>>>> tmp.dvi
>>>>>>>> tmp.tex
>>>>>>>> dvips(tmp.dvi)
>>>>>>>> dvips(tmp.tex)
>>>>>>>> library(tools)
>>>>>>>> texi2dvi(file='tmp.tex', pdf=TRUE,
clean=TRUE)
>>>>>>>>
>>>>>>>> I get this:
>>>>>>>>
>>>>>>>> Error in texi2dvi(file="tmp.tex",,  :
>>>>>>>>   Running 'texi2dvi' on
'tmp.tex' failed.
>>>>>>>> Messages:
>>>>>>>> /usr/bin/texi2dvi: pdflatex exited with bad
status, quitting.
>>>>>>>>
>>>>>>>> I've read that it may have something to do
with the path of pdflatex.
>>>>>>>>
>>>>>>>> Sys.which('pdflatex')
>>>>>>>>
>>>>>>>>            pdflatex
>>>>>>>>
>>>>>>>> "/usr/bin/pdflatex"
>>>>>>>>
>>>>>>>>
>>>>>>>> Sys.which('texi2dvi')
>>>>>>>>
>>>>>>>>            texi2dvi
>>>>>>>>
>>>>>>>> "/usr/bin/texi2dvi"
>>>>>>>>
>>>>>>>>> file.exists(Sys.which('texi2dvi'))
>>>>>>>>
>>>>>>>>
>>>>>>>> [1] TRUE
>>>>>>>>
>>>>>>>>> file.exists(Sys.which('pdflatex'))
>>>>>>>>
>>>>>>>>
>>>>>>>> [1] TRUE
>>>>>>>>
>>>>>>>> Is there a specific path I should be giving
with pdflatex and/or
>>>>>>>> 'texi2dvi to make this work?
>>>>>>>>
>>>>>>>> Thanks!
>>>>>>>>
>>>>>>>> On Mon, Dec 8, 2014 at 11:13 PM, Richard M.
Heiberger
>>>>>>>> <rmh at temple.edu>
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> yes of course, and the answer is latex() in
the Hmisc package.
>>>>>>>>> Why were you excluding it?
>>>>>>>>> Details follow
>>>>>>>>>
>>>>>>>>> Rich
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> The current release of the Hmisc package
has this capability on
>>>>>>>>> Macintosh and Linux.
>>>>>>>>> For Windows, you need the next release
3.14-7 which is available now
>>>>>>>>
>>>>>>>> at github.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ## windows needs these lines until the new
Hmisc version is on CRAN
>>>>>>>>> install.packages("devtools")
>>>>>>>>> devtools::install_github("Hmisc",
"harrelfe")
>>>>>>>>>
>>>>>>>>> ## All operating systems
>>>>>>>>> options(latexcmd='pdflatex')
>>>>>>>>> options(dviExtension='pdf')
>>>>>>>>>
>>>>>>>>> ## Macintosh
>>>>>>>>> options(xdvicmd='open')
>>>>>>>>>
>>>>>>>>> ## Windows, one of the following
>>>>>>>>>
>>>>>>>>
>>>>>>>>
options(xdvicmd='c:\\progra~1\\Adobe\\Reader~1.0\\Reader\\AcroRd32.exe')
>>>>>>>>>
>>>>>>>>> ## 32-bit windows
>>>>>>>>>
>>>>>>>>
>>>>>>>>
options(xdvicmd='c:\\progra~2\\Adobe\\Reader~1.0\\Reader\\AcroRd32.exe')
>>>>>>>>>
>>>>>>>>> ## 64 bit windows
>>>>>>>>>
>>>>>>>>> ## Linux
>>>>>>>>> ## I don't know the xdvicmd value
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ## this works on all R systems
>>>>>>>>> library(Hmisc)
>>>>>>>>> tmp <- matrix(1:9,3,3)
>>>>>>>>> tmp.dvi <- dvi(latex(tmp))
>>>>>>>>> print.default(tmp.dvi) ## prints filepath
of the pdf file
>>>>>>>>> tmp.dvi  ## displays the pdf file on your
screen
>>>>>>>>>
>>>>>>>>> On Mon, Dec 8, 2014 at 9:31 PM, Kate
Ignatius
>>>>>>>>
>>>>>>>> <kate.ignatius at gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> I have a simple question.  I know there
are plenty of packages out
>>>>>>>>>> there that can provide code to generate
a table in latex.  But I
>>>>>>>>>> was
>>>>>>>>>> wondering whether there was one out
there where I can generate a
>>>>>>>>
>>>>>>>> table
>>>>>>>>>>
>>>>>>>>>> from my data (which ever way I please)
then allow me to save it as
>>>>>>>>>> a
>>>>>>>>>> pdf?
>>>>>>>>>>
>>>>>>>>>> Thanks
>>>>>>>>>>
>>>>>>>>>> K.
>>>>>>>>>>
>>>>>>>>>>
______________________________________________
>>>>>>>>>> R-help at r-project.org mailing list --
To UNSUBSCRIBE and more, see
>>>>>>>>>>
https://stat.ethz.ch/mailman/listinfo/r-help
>>>>>>>>>> PLEASE do read the posting guide
>>>>>>>>
>>>>>>>> http://www.R-project.org/posting-guide.html
>>>>>>>>>>
>>>>>>>>>> and provide commented, minimal,
self-contained, reproducible code.
>>>>>>>>
>>>>>>>>
>>>>>>>> ______________________________________________
>>>>>>>> R-help at r-project.org mailing list -- To
UNSUBSCRIBE and more, see
>>>>>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>>>>>> PLEASE do read the posting guide
>>>>>>>> http://www.R-project.org/posting-guide.html
>>>>>>>> and provide commented, minimal, self-contained,
reproducible code.
>>>>>>>
>>>>>>>
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more,
see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>
>>
>> --
>> Brian D. Ripley,                  ripley at stats.ox.ac.uk
>> Emeritus Professor of Applied Statistics, University of Oxford
>> 1 South Parks Road, Oxford OX1 3TG, UK