Knitr: storing variables for later use - r

I'm relatively new to Knitr. I want to run a function just once, so that next time I don't have to evaluate it, because it would yield a different result. My MWE:
First time:
\documentclass{article}
\begin{document}
<<>>=
a<<-Sys.time()
#
<<>>=
a
#
\end{document}
Second time:
\documentclass{article}
\begin{document}
<<eval=FALSE>>=
a<-Sys.time()
#
<<>>=
a
#
\end{document}
I've tried using <<- so that the variable is stored in the global environment but it doesn't work.

Related

Sweave syntax highlighting in output - revisit

My question is the same as the one in the link Sweave syntax highlighting in output.
I have followed the suggestion by daroczig https://tex.stackexchange.com/questions/5113/how-to-colorize-syntax-using-r-sweave, and created the following test.Rnw file:
\documentclass{article}
\RequirePackage{fancyvrb}
\RequirePackage{listings}
\SweaveOpts{keep.source=TRUE}
<<SweaveListingsPreparations, results=tex, echo=FALSE, strip.white=false>>=
require(SweaveListingUtils)
SweaveListingPreparations()
setToBeDefinedPkgs(pkgs = c("SweaveListingUtils","distr"),
keywordstyles = c("\\bf\\color{blue}","\\bf\\color{red}"))
#
\begin{document}
\SweaveOpts{concordance=TRUE}
\section{Example}
This is an example with three variables in R.
<<>>=
options(continue = " ")
x <- 10
t <- 'The brown fox'
b <- TRUE
#
<<>>=
x
#
<<>>=
t
#
<<>>=
b
#
\end{document}
<<cleaup, echo=FALSE>>=
unloadNamespace("SweaveListingUtils")
#
However, I get the following error message:
Suggestions?
Since you don't have \usepackage{Sweave} in your document, Sweave will insert it. But the SweaveListingsUtils package also inserts conflicting code.
So you need to follow the advice in the SweaveListingsUtils documentation, and put in a comment
% \usepackage{Sweave}
near the start of your document. This will prevent R from inserting it.
However, do note that support for SweaveListingsUtils is ending; you are better off using knitr.

Remove brackets in Sweave output

I want to know if there is a way to print R object directly in a text (Sweave), but directly in a line of text.
I'd like to print this code
\documentclass{article}
\begin{document}
\SweaveOpts{concordance=TRUE}
YO MANNNNNNN 2+2 =
<<here, results=tex, echo=FALSE>>=
2+2
#
YEAHHHH!
\end{document}
And I want an output similar to this:
YO MANNNNNNN 2+2 = 4 YEAHHHH!
But, R is adding the answer brackets like this
YO MANNNNNNN 2+2 = [1] 4YEAHHHH!
Code:
\documentclass{article}
\begin{document}
% \SweaveOpts{concordance=TRUE}
YO MANNNNNNN 2+2 = \Sexpr{2+2} YEAHHHH!
\end{document}
n.b. For me commenting out \SweaveOpts{concordance=TRUE} worked just fine, but you made need to uncomment depending on your setup.
Prints:
YO MANNNNNNN 2+2 = 4 YEAHHHH!
Update - extra info per comment...
You can define an object within a 'chunk' to be later evaluated in line using \Sexpr{}
<<somechunk, results='tex',echo=FALSE, results='hide'>>=
x <- 2
#
Inline evaluation of x prints the number \Sexpr{x}.

Control width of knitr output for columns in sweave documents

According to FAQ.7 and Example.038, I should be able to control my width through global options options(width=40) or chunk options tidy.opts(width.cutoff=40). However, the text still runs off the gray box, and in my current case where I have two-column beamer slides. the source code runs into the next column. Is there anything else I can do besides turning off tidy tidy=FALSE and manually setting the breaks in my code?
Minimal working example:
\documentclass[8pt]{beamer}
\begin{document}
\begin{frame}[fragile]
<<>>=
library(reshape2)
options(width=38)
#
\begin{columns}[t]
\column{.5\textwidth}
<<>>=
dataframe <- data.frame(Column1=1:10,Column2=1:10,Variable=1:10,Value=1:10)
#
\column{.5\textwidth}
<<>>=
dataframe <- melt(dataframe,
id.vars=c("Column1","Column2"),
variable.name="Variable",
value.name="Value")
#
\end{columns}
\end{frame}
\end{document}
Output (problem is that columns run together):
Options should be passed like this:
<<echo=FALSE>>=
opts_chunk$set(comment="", message=FALSE,tidy.opts=list(keep.blank.line=TRUE, width.cutoff=120),options(width=100), cache=TRUE,fig.align='center',fig.height=6, fig.width=10,fig.path='figure/beamer-',fig.show='hold',size='footnotesize', cache=TRUE)
#
And here you specify width.cutoff for code and width for r results.

Why doesn't knitr allow directional assignment? [duplicate]

I am having trouble when using "reverse" assignment operators (->) in a knitr .Rnw file. For example, I have the following simple .Rnw file
\documentclass{article}
\begin{document}
<<test>>=
options(tidy=FALSE, width=50)
1:5 -> a
#
\end{document}
When I use knitr to compile into a pdf, the operator -> has been reversed so the output actually has
1:5 <- a
in it!
how can I change this?
Make tidy=FALSE a knitr chunk option rather than an R option:
\documentclass{article}
\begin{document}
<<test,tidy=FALSE>>=
options(tidy=FALSE, width=50)
1:5 -> a
#
\end{document}
(I don't think tidy=FALSE does anything at all in options(), but I guess it's harmless ...)
For setting tidy=FALSE on a chunk-by-chunk basis, Ben's answer has got you covered.
To reset the option globally, use opts_chunk$set(), like so:
\documentclass{article}
\begin{document}
<<setup, include=FALSE, cache=FALSE>>=
opts_chunk$set(tidy=FALSE)
#
<<test>>=
1:5 -> a
#
\end{document}
Additionally, as documented here, tidy.opts can give you finer-grained control over many aspects of the knitr's (and ultimately formatR::tidy.source()'s) tidying behavior. Perhaps unfortunately in this case, while you can tell knitr not to replace "=" with "<-" (by doing opts_chunk$set(tidy.opts=list(replace.assign=FALSE))you cannot use that option to control whether "->" is replaced by "<-".
Here's an example that uses tidy.opts
\documentclass{article}
\begin{document}
<<setup, include=FALSE, cache=FALSE>>=
opts_chunk$set(tidy.opts=list(replace.assign=FALSE))
#
<<test>>=
j <- function(x) { x<-y ## x<-y will be printed on new line, with added inter-token spaces
a = 1:5 ## will be indented, but "=" won't be replaced
} ## closing brace will be moved to start of line
#
\end{document}

knitr changing my reverse assignment operator -> to <-

I am having trouble when using "reverse" assignment operators (->) in a knitr .Rnw file. For example, I have the following simple .Rnw file
\documentclass{article}
\begin{document}
<<test>>=
options(tidy=FALSE, width=50)
1:5 -> a
#
\end{document}
When I use knitr to compile into a pdf, the operator -> has been reversed so the output actually has
1:5 <- a
in it!
how can I change this?
Make tidy=FALSE a knitr chunk option rather than an R option:
\documentclass{article}
\begin{document}
<<test,tidy=FALSE>>=
options(tidy=FALSE, width=50)
1:5 -> a
#
\end{document}
(I don't think tidy=FALSE does anything at all in options(), but I guess it's harmless ...)
For setting tidy=FALSE on a chunk-by-chunk basis, Ben's answer has got you covered.
To reset the option globally, use opts_chunk$set(), like so:
\documentclass{article}
\begin{document}
<<setup, include=FALSE, cache=FALSE>>=
opts_chunk$set(tidy=FALSE)
#
<<test>>=
1:5 -> a
#
\end{document}
Additionally, as documented here, tidy.opts can give you finer-grained control over many aspects of the knitr's (and ultimately formatR::tidy.source()'s) tidying behavior. Perhaps unfortunately in this case, while you can tell knitr not to replace "=" with "<-" (by doing opts_chunk$set(tidy.opts=list(replace.assign=FALSE))you cannot use that option to control whether "->" is replaced by "<-".
Here's an example that uses tidy.opts
\documentclass{article}
\begin{document}
<<setup, include=FALSE, cache=FALSE>>=
opts_chunk$set(tidy.opts=list(replace.assign=FALSE))
#
<<test>>=
j <- function(x) { x<-y ## x<-y will be printed on new line, with added inter-token spaces
a = 1:5 ## will be indented, but "=" won't be replaced
} ## closing brace will be moved to start of line
#
\end{document}

Resources