【发布时间】:2015-09-10 15:27:21
【问题描述】:
我正在扩展我在这里发布的一个问题:
If-Else Statement in knitr/Sweave using R variable as conditional
我想在 LaTeX 中使用 if-else 语法,以便根据 R 变量(比如 x)的值,输出两个 LaTeX 文本段落之一。如果 x>0,则 LaTeX 段落有一个图形和一个表格。但是,如果 x
我有一个可以工作的 MWE,它基于上一篇文章中的检查答案:
\documentclass[12pt,english,nohyper]{tufte-handout}
\usepackage{tabularx}
\usepackage{longtable}
\begin{document}
<<setup, echo = FALSE>>=
library(knitr)
library(xtable)
library(ggplot2)
knit_patterns$set(header.begin = NULL)
@
<<echo=FALSE,results='asis'>>=
fname="myOutput.pdf"
pdf(fname,width=4,height=4)
print(qplot(mpg,cyl,data=mtcars))
{dev.off();invisible()}
cat(sprintf('\\begin{marginfigure}
\\includegraphics[width=0.98\\linewidth]{%s}
\\caption{\\label{mar:dataMtcars}Comments about mtcar dataset.}
\\end{marginfigure}',sub('\\.pdf','',fname)))
@
<<echo=FALSE,results='asis'>>=
x<- rnorm(1)
if (x>0){
myDF = data.frame(a=rnorm(1:5),b=rnorm(1:5),c=rnorm(1:5))
print(xtable(myDF,caption='Data frame comments', label='tab:myDataFrame'),floating=FALSE, tabular.environment = "longtable",include.rownames=FALSE)
}
@
<<condition, echo=FALSE>>=
if(x>0){
text <- "Figure \\ref{mar:dataMtcars} shows the mtcars data set. The x value of \\Sexpr{x} was greater than 0. Table \\ref{tab:myDataFrame} shows my data frame."
}else{
text <- "Figure \\ref{mar:dataMtcars} shows the mtcars data set. The x value of \\Sexpr{x} was less than 0. We do not show a data frame."
}
@
Testing the code:
<<print, results='asis', echo=FALSE>>=
cat(text)
@
\end{document}
然后我将这个 MWE 保存为类似 testKnitr.Rnw 的文件,然后运行:
knit(input = "testKnitr.Rnw", output = "intermediate.Rnw")
knit2pdf(input = "intermediate.Rnw", output = "doc_final.tex")
我想知道我是否有效地创建了这段代码,特别是因为在我之前的帖子中向我指出 - 在仅使用 \Sexpr{} 的情况下 - 有更简单的解决方案。在这里织两遍有点麻烦。
有没有更简单的方法来合并我的 if/else 语句来显示包含变量值、数字和/或表格的两个段落之一,所有这些都基于变量的值?谢谢。
【问题讨论】:
标签: r if-statement latex knitr sweave