LaTeX и Knitr - Ошибка при вставке R-кода

У меня есть документ в следующей структуре.

\documentclass[11pt]{article}

\begin{document}
\title{Something}
\author{Andreas}
\date{May 8th, 2013} \maketitle

\section{Introduction}
\paragraph{...}

<<>>=
2+2
@

<<>>=
require('tm')
@

\begin{itemize}
  \item{asdf}
\end{itemize}

some text here.

\section{Intro}

More text.

\section{Other Stuff}

<<>>=
pdf <- readPDF(PdftotextOptions = '-layout')
@

<<eval=FALSE>>=
text <- pdf(elem = list(uri = file.name),
            language = 'en',
            id = 'id1')
@

\end{document}

Когда я запускаю следующую команду в R, я получаю следующую ошибку:

knit('test.rnw')

processing file: test.rnw
  |.......                                                          |  11%
  ordinary text without R code

  |..............                                                   |  22%
label: unnamed-chunk-1
Quitting from lines 12-13 (test.rnw) 
Error in pdf_doc(file, cache = FALSE) : 
  'file' must be a character string or a file/raw connection

Я не понимаю эту ошибку и не могу последовательно воспроизвести проблему. Я начал с чистого документа и добавил фрагменты кода R, которые отлично работают. Затем я дохожу до точки, когда он перестает правильно компилироваться. Затем кажется, что я могу удалить недавно добавленные фрагменты кода, но все равно получаю ту же ошибку.

Информация о сеансе:

R version 3.0.0 (2013-04-03)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] tm_0.5-8.3 knitr_1.2 

loaded via a namespace (and not attached):
[1] digest_0.6.3   evaluate_0.4.3 formatR_0.7    slam_0.1-28    stringr_0.6.2 
[6] tools_3.0.0   

Какие-либо предложения? Пожалуйста, дайте мне знать, если потребуется дополнительная информация. Спасибо.


person Andreas    schedule 07.05.2013    source источник


Ответы (1)


Ваш вопрос не совсем воспроизводим, но потенциально указывает на то, что происходит. У вас есть переменная file.name, которая передается команде pdf(), но Knitr не может ее найти. И я тоже не могу, когда пытаюсь запустить ваш код, так как он никогда не определен в документе Knitr.

Когда вы компилируете файл Knitr, R запускается с совершенно новой пустой средой. Если вы ранее установили file.name в своей рабочей области, вязание не загрузит его автоматически. Вам нужно будет установить его в чанке, прежде чем его можно будет использовать:

<<>>=
require('tm')
file.name <- #something#
@

Если вы загружаете файл, вам, возможно, придется поиграть с абсолютными путями или setwd(), чтобы заставить его работать.

Обновление:

Вы не пытаетесь фактически оценить text, поэтому неопределенный file.name не является проблемой. Я думаю, что основная проблема в том, что вы переименовываете встроенную функцию pdf(). Я получаю сообщение об ошибке при использовании pdf <- readPDF(PdftotextOptions = '-layout'), но оно последовательно компилируется, когда я использую другое имя переменной, например pdf.asdf <- readPDF(PdftotextOptions = '-layout').

person Andrew    schedule 07.05.2013
comment
Отличная догадка, и я уверен, что вы правы! Стоит отметить, что knitr имеет доступ к глобальной среде, если вы введете, скажем, knit2pdf() явно в консоли. Однако если вы используете кнопку «Скомпилировать PDF» в RStudio, он не сможет получить доступ к глобальной среде. - person Gregor Thomas; 07.05.2013
comment
В этом конкретном фрагменте я хочу отобразить псевдо-код R, фактически не оценивая его. Я могу ошибаться, но я думал, что использование опции eval=FALSE просто отобразит код R в формате Knitr без фактического запуска какой-либо команды. Вы правы, что в моем коде нет объекта с именем file.name. Я просто хотел описать синтаксис команды в этом фрагменте кода, фактически ничего не делая. - person Andreas; 07.05.2013
comment
У меня никогда не было этой проблемы раньше, но это имеет смысл. Отличный опыт обучения! Я изменил фрагмент, и теперь он отлично компилируется. Большое спасибо за вашу помощь, так как это вызвало огромную головную боль! - person Andreas; 07.05.2013