在RStudio中使用R标记打印函数中生成的绘图
我试图在R Studio中使用R标记功能,在那里我试图打印函数内部生成的绘图。这是我试图做的一个基本的例子在RStudio中使用R标记打印函数中生成的绘图,r,ggplot2,knitr,rstudio,R,Ggplot2,Knitr,Rstudio,我试图在R Studio中使用R标记功能,在那里我试图打印函数内部生成的绘图。这是我试图做的一个基本的例子 **Test printing plots generated in a function** ================================================ ``` {r fig.width=8, fig.height=4, warning=FALSE, eval=TRUE, message=FALSE, tidy=TRUE, dev='png',
**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
```
**在函数中生成的测试打印图**
================================================
```{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您的代码中有两个问题:
ggplot无法识别数据x和y数据,因为它在数据环境中工作。您应该直接为它指定列名
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))
}
```
**在函数中生成的测试打印图**
================================================
```{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'}
如果你做了一个多面的情节然后编织出来呢?不!只要它在函数内部,就不会被打印。另外,我刚刚测试了qplot()是否生成了所需的输出,而ggplot没有。我不能打印函数内部生成的ggplot对象,除了使用ggsave()将其保存为pdf之外。例如,在for
语句内部或在函数中,您需要显式打印ggplot2对象,因此请尝试打印(p1)
@kohske是正确的,这是R FAQ 7.22:在使用knitr
/RStudio之前,检查代码是否在R中按预期运行;如果它在R中运行,而不是在RStudio中运行,则可能是我们的错误,否则您可能会在某个地方粗心大意。@kohske和Yihui-函数中的显式print(p1)语句本身在knitr/RStudio和R中工作。我一直认为ggplot对象不需要显式调用打印。另外,我注意到我不能指定x=data[,1]和y=data[,2],因为它抱怨closure类型的对象是可子集的。下面的cafe876也说明了这个问题,一旦我将代码更改为x=x和y=y以及函数内部的打印,它就可以工作了。谢谢修复。使用plotting函数创建索引的唯一原因是,在生成绘图的同时,从函数(如汇总表)返回不同的对象。我相信有更好的方法可以做到这一点,但这似乎对我很有效。另外,我想知道为什么在for循环中使用plot()命令时,R不会抱怨需要使用必需的变量(x,y)。我试过打印,效果很好。谢谢你。
**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))
}
```