2

我有五个图像存储如下(其中“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 错误:找不到文件 `paste(getwd(), "/", outDir , "/", plotName, "_", i, sep="")'。第 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 循环和图像插入简单地放入 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-loop 或 .Rnw 文件中):

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

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

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

4

3 回答 3

0

编织手册

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

要么手动保存绘图并使用 LaTeX 包含(如 Sweave 手册所推荐)插入它们,要么切换到 knitr。我会推荐后者。

于 2015-06-11T20:59:39.927 回答
0

秘诀是在 cat 函数中使用 paste 。例子:

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

for(i in c(1:100) {

    cat(paste("ok\\\\\\")

}

@

于 2021-08-12T05:45:21.187 回答
0

对于任何可能尝试使用 Latex 和 knitr 图像循环的人,我这样做是为了绘图,例如。像这样:

<<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'成功了。但我不是专家。这很容易在循环中为我创建数百个图块。

干杯

于 2020-05-16T23:44:31.667 回答