工作knitr
引入了一个新问题——我的许多R
脚本都包含图片生成代码,而当我获取代码时,绘图代码会减慢速度。
我的想法是将绘图代码移动到一个组中,该组仅在代码在上层执行时运行,并且在代码由另一个 R 脚本提供时不运行,通过source()
习语。这可能吗?
我发现了这个旧的 SO 问题,但是在我的情况下interactive()
总是TRUE
如此,所以接受的答案不起作用。
我的情况如下:我有一个文件 ,并通过将其从 发送到myKnit.rnw
运行它,使用. 因此,总是将是,并且将是非零的——因为它基本上是通过应用到临时文件来工作的。 vim
R
vim-r-plugin
interactive()
TRUE
length(sys.frames())
vim-r-plugin
base::source(...)
我正在寻找的解决方案R
相当于python
idiom if __name__ == __main__
。
因此,当通过myKnit.rnw
运行和获取源myscript.r
时source("~/R/myscript.r")
,if
计算FALSE
结果和绘图代码myscript.r
不会运行。
在 python 术语中,__name__
(或我们称之为的任何东西)在 sources 时不会是__main__
,myKnit.rnw
但当myscript.r
我myscript.r
从vim
.
示例knitr
代码:
\documentclass{beamer}
\begin{document}
\title{A Minimal Example}
\author{ricardo}
\maketitle
\begin{frame}[fragile]
source the code and then use the plot
<<source_plotScript, include=FALSE>>=
source("~/rwd/plotScript.r")
@
a histogram!
<<histy, fig.width=7, fig.height=5, messages=FALSE, warnings=FALSE>>=
print(pp)
@
\end{frame}
\end{document}
这是来源的情节脚本:
require(ggplot2)
set.seed(1)
x <- rnorm(100)
pp <- qplot(x, geom = 'histogram')
pdf("seed1Hist.pdf")
print(pp)
dev.off()
带有系统特定标志的解决方案,反映了 Yihui 的评论
fromSource <- function()
{
knitSysSwitch <- function()
{
switch(Sys.info()[['sysname']],
Windows = 'source',
Darwin = 'base::source')
}
length(sys.frame()) >= 4 && sys.call(1)[[1]] == knitSysSwitch()
}