Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在RStudio中使用R标记打印函数中生成的绘图_R_Ggplot2_Knitr_Rstudio - Fatal编程技术网

在RStudio中使用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',

我试图在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', 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))
    }
    
    ```