Henrik Bengtsson
October 14, 2013
Availability: install.packages("R.rsp")
from CRAN
Since: 2002
> library(R.rsp)
> rcat("A random number: <%=sample(1:10, size=1)%>")
A random number: 7
> rfile("http://example.org/vignette.tex.rsp")
RspFileProduct:
Pathname: vignette.pdf
File size: 264925 bytes
Content type: application/pdf
Metadata 'title': 'Dynamic document creation using RSP'
Metadata 'keywords': 'Literate programming, HTML, PDF'
Metadata 'author': 'Henrik Bengtsson'
Title: Example
Counting:<% for (i in 1:3) { %>
<%=i%>
<% } %>
cat("Title: Example\nCounting:")
for (i in 1:3) {
cat(" ")
cat(i)
}
Title: Example
Counting: 1 2 3
<%-- ... --%>
)<%@ ... %>
)<% ... %>
)<%-- ... --%>
)<%-----------------------------
Compile to PDF:
R.rsp::rfile("report.tex.rsp")
------------------------------%>
\documentclass{report}
...
RSP comments drop anything within, e.g. private notes, other RSP constructor (nested comments too) and will never be part of the output.
<%@ ... %>
)<%@include file="http://example.org/QC.tex.rsp"%>
<%@ifeq version="devel"%>
<%@include file="templates/QA-devel.tex.rsp"%>
<%@else%>
Quality assessment is still under development.
<%@endif%>
<%@meta title="Example"%>
\hypersetup{pdftitle=<%@meta name="title"%>}
\title{<%@meta name="title"%>}
RSP preprocessing directives are independent of R, i.e. they would look the same with RSP for Python.
<% ... %>
)<%= sample(1:100, size=1) %>
<% for (i in 1:3) { %>
<%=i%>
<% } %>
<% fit <- segmentByPairedPSCBS(data) %>
\section{Segmentation results}
<% for (chr in 1:23) { %>
\subsection{Chromosome <%=chr%>}
<% fitT <- extractChromosome(fit, chr) %>
PSCBS identified <%=nbrOfSegments(fitT)%> segments
on Chr. <%=chr%>.
...
<% } # for (chr ...) %>
It is rather tedious to achieve the same using noweb-style markup, e.g. Sweave and knitr.
<%-- RSP TEMPLATES --%>
<% chromosomeSummary <- function(chr) { %>
<% fitT <- extractChromosome(fit, chr) %>
PSCBS identified <%=nbrOfSegments(fitT)%> segments
on Chr. <%=chr%>.
...
<% } %>
<%-- DOCUMENT --%>
...
<% for (chr in 1:23) { %>
\subsection{Chromosome <%=chr%>}
<% chromosomeSummary(chr) %>
<% } # for (chr ...) %>
> rcat("A random integer in [1,100]:
<%=sample(1:100, size=1)%>\n")
A random integer in [1,100]: 77
Consider RSP file ‘count.rsp’ (think ‘count.R’):
Counting:<% for (i in 1:10) { %>
<% Sys.sleep(0.3) %><%=i%>
<% } %>.
Running this RSP script gives:
> rsource("count.rsp")
Counting: 1 2 3 4 5 6 7 8 9 10.
> rfile("report.md.rsp", args=list(n=50, model="L1"))
RspFileProduct:
Pathname: report.html
File size: 43564 bytes
Content type: text/html
> rfile("http://example.org/vignette.tex.rsp")
RspFileProduct:
Pathname: vignette.pdf
File size: 264925 bytes
Content type: application/pdf
Metadata 'title': 'Dynamic document creation using RSP'
Metadata 'keywords': 'Literate programming, HTML, PDF'
Metadata 'author': 'Henrik Bengtsson'
RSP-embedded LaTeX
\includegraphics{<%=toPDF("MyFigure,yeah,cool", {
curve(dnorm, from=-5, to=+5)
})%>}
generates the image file and outputs
\includegraphics{MyFigure,yeah,cool}
which appears as
Session info:
R version 3.0.2 Patched (2013-10-08 r64038) Platform: x86_64-w64-mingw32/x64 (64-bit) locale: [1] LC_COLLATE=C [2] LC_CTYPE=English_United States.1252 [3] LC_MONETARY=English_United States.1252 [4] LC_NUMERIC=C [5] LC_TIME=English_United States.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] R.devices_2.7.2 R.rsp_0.9.28 R.oo_1.15.8 R.methodsS3_1.5.2 loaded via a namespace (and not attached): [1] R.utils_1.27.6 base64enc_0.1-1 tools_3.0.2
This report was automatically generated using rfile()
of the R.rsp package. Total processing time after RSP-to-R translation was 1.64 secs.