2015-06-08 8 views
2

Я пять изображений хранятся следующим образом (где «CurrentDirectory» результат я получаю от команды getwd()):Вставьте несколько изображений в для цикла в Sweave Документ

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 

Я пытаюсь написать сценарий .Rnw в Rstudio, который создаст файл .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} 

За что я получаю несколько ошибок:

Line 25: Undefined последовательности управления. Строка 29: Отсутствует значение $. Строка 29: Ошибка LaTeX: файл `paste (getwd(),"/", outDir,"/", plotName," _ ", i, sep =" ") 'не найден. Строка 29: Отсутствует значение $. Строка 30: Неопределенная последовательность управления.

Любая помощь очень ценится!

EDIT 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 

Я попытался изменить состояние в течение цикла также включать \ Sexpr {}, как в:

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

Но Тхи s получает мне ошибку:

Unexpected 'in' 

Любая помощь приветствуется!

EDIT 2:

Я попытался принимая во внимание рекомендации, чтобы просто поставить на петлю и имиджевую вставки в 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' 

Кроме того, когда я запускаю код ниже в одиночку (не в наличии для цикла или .Rnw файла):

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

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

изображение, которое генерирует выглядит иначе, чем .jpeg изображение, которое я (расположенного в CurrentDirectory/результаты/thePlot_1.jpg)

+0

Попробуйте обернуть 'paste (...)' in '\ Sexpr {}'. –

+0

@AlexA .: Спасибо за помощь. Казалось, что он решил проблему, хотя кажется, что для цикла все еще не работает, как я надеюсь. У вас есть предложения по поводу этой новой ошибки? – LanneR

+0

Я не думаю, что использование '\ For' и' \ EndFor' для включения нескольких графиков - лучший способ сделать это. (На самом деле я не думаю, что вы это сделаете так). Я бы, вероятно, сделал фрагмент R, например '<< сюжеты, echo = FALSE, fig = TRUE, figs.only = TRUE, results = hide >>' (R для отображения графиков) '@'. Это автоматически будет внедрять их. –

ответ

0

От the Sweave Manual:

A.7 Creating several figures from one figure chunk does not work

Либо сохранить участки вручную и вставить их с помощью LaTeX включает в себя (в соответствии с рекомендациями Sweave инструкции) или переключиться на knitr. Я бы рекомендовал последнее.

+0

Спасибо за совет. Это может показаться очевидным, но я не понимаю о переходе на Книр. Когда я сравниваю код, который я написал на минимальном примере Knitr, они выглядят почти одинаково (https://github.com/yihui/knitr/blob/master/inst/examples/knitr-minimal.Rnw). Мне просто тяжело видеть, как даже начать фиксировать это безболезненно, насколько это возможно. – LanneR

+0

@ LanneR Во многих случаях .Rnw, написанный для Sweave, будет отлично работать для knitr, но иногда вам нужно внести некоторые изменения. В этом документе описывается, как перейти: http://yihui.name/knitr/demo/sweave/. Единственное отличие состоит в том, что Sweave не находится в активной разработке и имеет ограничения (например, тот, с которым вы сталкиваетесь), а knitr находится в активной разработке (и у вас нет ограничений, с которыми вы сталкиваетесь). – Thomas

+0

Спасибо. Я использовал эту команду Sweave2knitr, как опубликовано в блоге Yihui. Единственным изменением был раздел после \ SweaveOpts {concordance = TRUE} (см. Третье редактирование). Я все еще получаю сообщение об ошибке с оператором \ FOR как «Неопределенная последовательность управления». Еще раз спасибо за предложения. – LanneR

 Смежные вопросы

  • Нет связанных вопросов^_^