将for循环中的多个图像插入Sweave文档

时间:2015-06-08 16:38:57

标签: r image for-loop sweave rnw

我有五个图像存储如下(其中" currentDirectory"是我从命令getwd()获得的结果):

currentDirectory/results/thePlot_1.jpg
currentDirectory/results/thePlot_2.jpg
currentDirectory/results/thePlot_3.jpg
currentDirectory/results/thePlot_4.jpg
currentDirectory/results/thePlot_5.jpg

我正在尝试在Rstudio中编写.Rnw脚本,该脚本将创建.tex文件,然后我可以运行pdflatex以获得包含这五个图像的.pdf文件。以下是我的尝试:

\documentclass{article}
\usepackage{float, hyperref}
\usepackage[margin=1in]{geometry}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{caption}
\usepackage{algorithm}
\usepackage{algorithmic}

\begin{document}
\SweaveOpts{concordance=TRUE}

\author{myName}
\title{myTitle}

\maketitle

<<options, echo=FALSE>>=
library(knitr)
  opts_chunk$set(cache=TRUE)
@

\section*{mySection}

\FOR{i in 1:5}
nPlots=i
plotName = "thePlot"
outDir = "results"
\includegraphics{paste(getwd(), "/", outDir , "/", plotName, "_", i, sep="")}
\ENDFOR

\end{document}

我收到了几个错误:

第25行:未定义的控制序列。 第29行:缺少$插入。 第29行:LaTeX错误:文件`粘贴(getwd(),&#34; /&#34;,outDir,&#34; /&#34;,plotName,&#34; _&#34;,i,sep =&#34;&#34;)&#39;未找到。 第29行:缺少$插入。 第30行:未定义的控制序列。

任何帮助都非常感谢!

编辑1:我考虑了Alex A。的建议,并将该部分更改为包含\ Sexpr {}表达式,如下所示:

\FOR{i in 1:5}
\Sexpr{nPlots=i}
\Sexpr{plotName = "thePlot"}
\Sexpr{outDir = "results"}
\includegraphics{\Sexpr{paste(getwd(), "/", outDir , "/", plotName, "_", i, sep="")}}
\ENDFOR

\end{document}

但是,我现在收到错误:

object 'i' not found

我尝试将for循环中的条件更改为包含\ Sexpr {},如:

\FOR{\Sexpr{i in 1:5}}

但是这给我带来了错误:

Unexpected 'in'

感谢任何帮助!

编辑2:

我尝试考虑过简单地将for-loop和图像插入到Rcode中的建议。所以,我尝试使用jpeg库及其readJPEG方法,如下所示:

<<echo=FALSE>>==
library(jpeg)
@

<<plots, echo = FALSE, fig = TRUE, figs.only = TRUE, results = hide>>=
for (i in 1:5){
  nPlots=i
  plotName = "thePlot"
  outDir = "results"

  img <- readJPEG(paste(getwd(), "/", outDir , "/", plotName, "_", i, ".jpg", sep=""))
  plot(img)
}
@

\end{document}

不幸的是,这仍然会导致错误:

unexpected 'in'

此外,当我单独运行以下代码时(不在for循环或.Rnw文件中):

  nPlots=1
  plotName = "thePlot"
  outDir = "results"

  img <- readJPEG(paste(getwd(), "/", outDir , "/", plotName, "_", i, ".jpg", sep=""))
  plot(img)

生成的图像看起来与我拥有的.jpeg图像不同(位于currentDirectory / results / thePlot_1.jpg)

2 个答案:

答案 0 :(得分:0)

来自the Sweave Manual

  

A.7从一个图形块创建多个数字不起作用

手动保存图并使用LaTeX include(按照Sweave手册的建议)插入图表或切换到knitr。我会推荐后者。

答案 1 :(得分:0)

对于可能尝试使用乳胶和编织图像循环的任何人,我都会进行绘图。像这样:

<<echo=F, cache=T,cache.rebuild=T, results='asis' >>=

pictures <- c(pathtoimage1, pathtoimage2, pathtoimage3)   

plots <- ""
for(pic in pictures){
plots <- c(plots,paste("\\includegraphics[width=0.5\\linewidth]{",pic,"}",sep=""))
}
cat(plots)

@

我相信results='asis'可以解决问题。但是我不是专家。这为我轻松地在循环中在一个块中创建了数百个图。

欢呼