在knitr上绘制三分之一的绘图

在knitr上绘制三分之一的绘图,r,plot,knitr,r-markdown,R,Plot,Knitr,R Markdown,我想运行一个脚本并制作多个绘图,但只在最后绘图,然后再进行标记 因此,我尝试将许多绘图保存为绘图列表,但不将它们发布到markdown中。 第二步是遍历列表,在三个图中绘制一个,但由于某种原因,我只得到最后一个图 #+ setup, include=FALSE library(knitr) opts_chunk$set(fig.path = 'figure/silk-', fig.width = 10, fig.height = 10) #' Make a list of plots. #'

我想运行一个脚本并制作多个绘图,但只在最后绘图,然后再进行标记
因此,我尝试将许多绘图保存为绘图列表,但不将它们发布到markdown中。
第二步是遍历列表,在三个图中绘制一个,但由于某种原因,我只得到最后一个图

#+ setup, include=FALSE

library(knitr)
opts_chunk$set(fig.path = 'figure/silk-', fig.width = 10, fig.height = 10)

#' Make a list of plots.
#' 
#/* do not show in Markdown
index = 1
plots<-list()
for (let in letters)
{
 plot(c(index:100))
 assign(let,recordPlot())
 plot.new()
 plots[index]<-(let)
 index=index+1
}
#*/go through list of plots and plot then to markdown file
for (p in seq(from = 1, to = length(plots), by =3))
{

    print(get(plots[[p]]))

} 
#+设置,include=FALSE
图书馆(knitr)
选择块$set(图路径='figure/silk-',图宽度=10,图高度=10)
#"列出情节清单。
#' 
#/*不显示在降价中
索引=1

绘图您的代码中有一些错误是其他编程语言遗留下来的:

  • 根本不要使用
    assign
    。允许使用assign的人不会使用它
  • plot.new()
    创建一个空页面。遗漏
  • 不要使用
    get
    。它在S-Plus中有它的用途,但现在已经没有用处了
  • 对于列表,使用
    [[
    ,例如
    绘图[[index]]
  • 最重要的是:您想要的是有意义的,但标准图形(如绘图)不适合于此,因为它是在考虑行动的情况下构建的,而不是在分配的情况下构建的。
    lattice
    ggplot2
    图形都具有分配意识
  • 在本例中,我使用
    lappy
    作为标准R实践的演示。在这种情况下,for循环不会变慢,因为绘图占用了大部分时间
  • 最好使用面或面板,而不是许多单独的绘图
`


代码中有一些错误是其他编程语言遗留下来的:

  • 根本不要使用
    assign
    。允许使用assign的人不会使用它
  • plot.new()
  • 不要使用
    get
    。它在S-Plus中有它的用途,但现在已经没有用了
  • 对于列表,使用
    [[
    ,例如
    绘图[[index]]
  • 最重要的是:您想要的是有意义的,但标准图形(如绘图)不适合于此,因为它是在考虑行动的情况下构建的,而不是在分配的情况下构建的。
    lattice
    ggplot2
    图形都具有分配意识
  • 在本例中,我使用
    lappy
    作为标准R实践的演示。在这种情况下,for循环不会变慢,因为绘图占用了大部分时间
  • 最好使用面或面板,而不是许多单独的绘图
`


谢谢!1.我不确定我是否理解您的一些评论:“允许使用assign的人不会使用它”(?)2.您将循环转换为应用这是一个很好的实践,但是当我注释掉应用函数并仅使用最后一个for循环时,我仍然只得到最后一个plot documentedIt,这是2001年左右我在类似的工作中使用assign时r-help中的一句话。请参阅和其他许多地方。当您注释lappy函数时,您将一无所获,或者更好在重新运行之前,请重新启动R。我不会在运行之前和之后对其进行完整的注释,因此它不会显示在md文件中。谢谢!1.我不确定我是否理解您的一些注释:“允许使用assign的人不会使用它”(?)2.您将循环转换为应用这是一个很好的实践,但是当我注释掉应用函数并仅使用最后一个for循环时,我仍然只得到最后一个plot documentedIt,这是2001年左右我在类似的工作中使用assign时r-help中的一句话。请参阅和其他许多地方。当您注释lappy函数时,您将一无所获,或者更好在重新运行之前,请重新启动R。我不会完全注释掉它,我在之前和之后都添加了“/*”,因此它不会显示在md文件中
library(knitr)
library(lattice)
# Make a list of plots.
# do not show in Markdown
plots = lapply(letters[1:3],
    function(letter) {xyplot(rnorm(100)~rnorm(100), main=letter)})

# print can use a list (not useful in this case)    
print(plots)

# go through list of plots and plot then to markdown file
# This only makes sense if you do some paging in between. 
for (p in seq(from = 1, to = length(plots), by =3))
{
  print(plots[[p]])
}