2012-07-11 57 views
6

我试图在R Studio中使用R标记功能,其中我试图打印在函数内部生成的图。这是我试图做的一个基本的运行示例。在RStudio中使用R Markdown生成功能中的打印图

**Test printing plots generated in a function** 
================================================ 

``` {r fig.width=8, fig.height=4, warning=FALSE, eval=TRUE, message=FALSE, tidy=TRUE, dev='png', echo=FALSE, fig.show='hold', fig.align='center'} 
dat <- data.frame(x=c(1:10),y=c(11:20),z=c(21:30),name=rep(c("a","b"),each=5)) 
library(ggplot2) 

ex <- function(data){ 

    plot(data[,1],data[,2]) 
    plot(data[,1],data[,3]) 
} 

for (i in 1:10){ 
t1 <- rbind(i,ex(dat)) 
} 
t1 
``` 

那些测试此代码,请务必将其保存为“.Rmd”文件,然后运行在RStudio工具栏knithtml()。上面的代码对于我希望的html输出的类型来说绝对正确。但是,当我用基于ggplot的代码替换基本绘图函数时,我无法得到我以前得到的10个绘图的ggplot输出。上面的底图代码现在被以下代码所取代

p1 <- ggplot(data=data, aes(x=data[,1],y=data[,2])) 
    p1 <- p1+geom_point() 
    p1 

我在这里丢失了一些非常简单的东西。

VJ

+0

如果有什么你犯了一个层面的情节及编织品是什么? – 2012-07-11 16:12:21

+1

不!只要它在功能内部,它就不会被打印。另外,我只是测试了qplot()产生所需的输出,而ggplot没有。我不能打印在函数内生成的ggplot对象,除了使用ggsave()将其另存为pdf – 2012-07-11 16:35:50

+1

在'for'语句或函数内部,你需要明确地print'ggplot2对象,所以试试'print(p1)'。 – kohske 2012-07-11 16:53:16

回答

5

有两个问题在你的代码:

  1. ggplot不能识别数据x和y的数据,bacause它的工作原理数据环境中。你应该直接给它列名。
  2. yur循环中的代码没有意义。你不能将一个绘图与一个索引混合...(它与基本绘图一起工作的原因是通过副作用),我用简单的绘图命令替换了它。

下面的工作:

**Test printing plots generated in a function** 
================================================ 

``` {r fig.width=8, fig.height=4, warning=FALSE, eval=TRUE, message=FALSE, tidy=TRUE, dev='png', echo=FALSE, fig.show='hold', fig.align='center'} 
dat <- data.frame(x=c(1:10),y=c(11:20),z=c(21:30),name=rep(c("a","b"),each=5)) 
library(ggplot2) 

ex <- function(data){ 
    p1 <- ggplot(data=data, aes(x=x,y=y)) 
    p1 <- p1+geom_point() 
    return(p1) 
} 

for (i in 1:2){ 
plot(ex(dat)) 
} 

``` 
+0

感谢您的修复。我使用绘图函数创建索引的唯一原因是从函数(如汇总表)返回不同的对象,并生成绘图。我确信有更好的方法来做到这一点,但这似乎对我有用。另外,我想知道为什么R在for循环中使用plot()命令时不会抱怨需要变量(x,y)。我尝试打印,它工作得很好。不管怎么说,多谢拉。 – 2012-07-11 17:26:38