【问题标题】:R, Knitr and Latex (winedt and RStudio) compilation and externalizationR、Knitr 和 Latex(winedt 和 RStudio)编译和外部化
【发布时间】:2015-02-06 02:51:42
【问题描述】:

我不是 Latex 新手,而是 R、RStudio 和 Knitr,它们实际上是非常强大的工具。 我正在编写一个相当大的 R 脚本,它输出几个图表。我的意图是使用 Knitr 设置一个乳胶文档,以便我可以继续处理我的 R 脚本,当我确实想要报告时,我会跳转到 .rnw 并编译,我相信它会拥有最新生成的数据,因为它会直接读取 .r 脚本。

首先,我想问一些关于什么是最佳做法的指导?我一直在考虑## ---- preambule 并为每个相关情节都这样做?地块集?并在开头放置一个 read_chunk 来加载数据并做所有的初步工作。

假设这是一种很好的方式来做我想做的事情并继续解决我遇到的问题。

我的脚本在 R 中运行良好,没有一个警告,但是当使用 Echo=TRUE 调用 read_chunk(file.R) 时,我看不到相同的输出。首先,它确实通过了 PDF,但确实生成了我可以编译的 .tex。我看到的输出要短得多,就好像它在某些时候停止读取一样。

我得到的错误是

processing file: minimal.Rnw

  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |.......                                                          |  11%
  ordinary text without R code


  |                                                                       
  |..............                                                   |  22%
label: external-code (with options) 
List of 1
 $ echo: logi FALSE


  |                                                                       
  |......................                                           |  33%
  ordinary text without R code


  |                                                                       
  |.............................                                    |  44%
label: preambule (with options) 
List of 1
 $ echo: logi FALSE


  |                                                                       
  |....................................                             |  56%
  ordinary text without R code


  |                                                                       
  |...........................................                      |  67%
label: boring-random

  |                                                                       
  |...................................................              |  78%
  ordinary text without R code


  |                                                                       
  |..........................................................       |  89%
label: boring-plots (with options) 
List of 3
 $ fig.width : num 4
 $ fig.height: num 4
 $ out.width : chr ".4\\linewidth"


  |                                                                       
  |.................................................................| 100%
   inline R code fragments


output file: minimal.tex

Error in regexpr("\\.([[:alnum:]]+)$", x) : object 'filename' not found
Calls: file_ext -> regexpr
Execution halted

但是脚本不包含任何花哨的东西。只是加载数据,创建一些函数,如SaveImage 之类的......

我必须知道我的脚本中使用了正则表达式...

也许它不相关,但这是我在echo=TRUE 时得到的输出

## Loading required package: methods
## Loading required package: MASS
## Loading required package: modeest
##
## This is package 'modeest' written by P. PONCET.
## For a complete list of functions, use 'library(help = "modeest")' or 'help.start()'.
##
## Loading required package: car
##
## Attaching package: 'lubridate'
##
## The following object is masked from 'package:plyr':
##
## here

如果我在输出的 RStudio 中运行相同的块,下一行是

Attaching package: ‘lubridate’

The following object is masked from ‘package:plyr’:

    here

> library(knitr)
> 

我可能不会马上解决这个问题。我需要做的就是使用 Latex 设置一个不错的文档,该文档将编译我的 R 脚本中的点点滴滴,如果有意义的话,我将在不处理 .tex 文档的情况下对其进行编辑。除了添加正确的标题(## ---- preambule 等)。

总而言之,我不知道正则表达式的问题出在哪里,我仍然创建了一个可以编译的 .tex,通过这样做,我发现我得到的输出与R直接运行脚本,就好像它卡在某个地方......我天真的想法倾向于库加载问题。

感谢您的帮助,并致以最诚挚的问候。

【问题讨论】:

  • 更新:而不是read_chunk,我复制/粘贴了完全相同的代码,还尝试了source(),我最终得到winedt,出现相同的正则表达式错误,但是.tex 再次正常用于编译。然而,即使是 .tex 编译,## ---- section 的执行似乎也无法正常工作。如果我通过复制/粘贴实际代码来替换该块,则会生成绘图并且一切都很好。除了如果我在我的脚本上工作并更改它,我将不得不在 .rnw 中再次复制它,这不是我想要的......
  • 我得到了使用相同的 .rnw 文件生成的 PDF,但在 RStudio 中处理...所以 regexpr 的东西与 WinEdt 有某种关系。取得进展...
  • 即使从你冗长的解释中也无法真正理解你在做什么,但如果出现你提到的奇怪错误:traceback() 可能是你的朋友!
  • 谢谢。我唯一想做的就是在乳胶文档中读取我的 .R 文件的一部分,并且使用## ---- SectionToRead 并没有被证明是有效的......有没有另一种方法,比如使用行号告诉 Source 命令只运行 R 脚本的这个或这个部分?
  • 不太熟悉 R 和 LaTeX,我记得(至少是旧的)knitr 可以选择从外部 R 文件导入块。因此,如果您使用 knitr 创建您的 LaTeX 文档,那么该过程可能是前进的方向。

标签: r knitr


【解决方案1】:

谢谢保罗,我有办法做我想做的事:

我在第一个块中使用 source(file.R)。 然后我在第二个块中使用 read_chunk(file.R) ,这使我可以使用 ## ---- portion 逐部分执行脚本

然后通过在我的 R 脚本中随处放置几个部分,我可以通过在 R 脚本中调用具有部分名称的块来调用我想要的部分。希望这很清楚。

但是这令人困惑,例如 fig.width 以英寸为单位,而 out.width 可以以英寸、厘米或其他单位为单位,但必须使用引号...... .

再次感谢 Paul,希望对其他用户有所帮助。

【讨论】:

    猜你喜欢
    • 2019-04-14
    • 2018-05-23
    • 2023-03-31
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多