【问题标题】:LaTeX and knitr - Error inserting R CodeLaTeX 和 knitr - 插入 R 代码时出错
【发布时间】:2013-05-07 16:06:03
【问题描述】:

我有一个具有以下结构的文档。

\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   

有什么建议吗?如果需要更多信息,请告诉我。谢谢。

【问题讨论】:

    标签: r latex knitr


    【解决方案1】:

    您的问题并非完全可复制,但它确实可能表明正在发生的事情。您有一个变量 file.name 被传递给 pdf() 命令,但 knitr 找不到它。我也不能在尝试运行您的代码时,因为它从未在 knitr 文档中定义。

    当你编译一个 knitr 文件时,R 会从一个全新的空环境开始。如果您之前在工作区中设置了file.name,knitr 将不会自动加载它。您需要先将其设置为一个块,然后才能使用它:

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

    如果您正在加载文件,您可能需要使用绝对路径或setwd() 才能使其正常工作。

    更新:

    您并没有尝试实际评估text,因此未定义的file.name 不是问题。我认为主要问题是您正在重命名内置 pdf() 函数。使用 pdf &lt;- readPDF(PdftotextOptions = '-layout') 时出现错误,但当我使用不同的变量名(如 pdf.asdf &lt;- readPDF(PdftotextOptions = '-layout'))时,它会始终编译。

    【讨论】:

    • 猜对了,我敢打赌你是对的!值得注意的是knitr 确实可以访问全局环境,如果您在控制台中明确输入knit2pdf()。但是,如果您使用 RStudio 中的“编译 PDF”按钮,则无法访问全局环境。
    • 在那个特定的块中,我希望显示伪 R 代码而不实际评估任何代码。我可能弄错了,但我认为使用“eval=FALSE”选项只会以“knitr”格式显示 R 代码,而无需实际运行任何命令。您是正确的,在我的代码中的任何地方都没有标题为“file.name”的对象。我只是想在这个代码块中描述命令的语法,实际上没有做任何事情。
    • 我以前从未遇到过这个问题,但这是有道理的。一次绝佳的学习体验!我更改了块,现在它编译得很好。非常感谢您的帮助,因为这引起了极大的头痛!
    猜你喜欢
    • 2015-09-29
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2014-10-28
    • 2012-12-14
    • 1970-01-01
    相关资源
    最近更新 更多