1

我创建了一个函数,它可以根据列表为您提供所需的绘图数量。

这是我创建的示例。

list_genes <- c("GEN1", "GEN2", "GEN3")


myfunction <- function(x,y){
  
  for(gene in list_genes){
    # This to draw both plots
      par(mfrow=c(2,1))  
      
      stripchart(x, method="jitter", vertical=F, main=paste0("Plot of ", gene))
      
      hist(x, main=paste0("Plot of ", gene))
  }
}

myfunction(x=c(1,5,6,2,4,30,23,12,45))

图像1

我的最终目标是(自动)创建一个演示文稿,其中包含我从函数中生成的所有图。

但是,如果我尝试创建一个ioslides_presentation,它们不会出现(只有第一个和第二个)。

---
title: "My presentation"
output: ioslides_presentation
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

## PLOTS 

```{r}
list_genes <- c("GEN1", "GEN2", "GEN3")


myfunction <- function(x,y){
  
  for(gene in list_genes){
    # This to draw both plots
      par(mfrow=c(2,1))  
      
      stripchart(x, method="jitter", vertical=F, main=paste0("Plot of ", gene))
      
      hist(x, main=paste0("Plot of ", gene))
  }
}

myfunction(x=c(1,5,6,2,4,30,23,12,45))
```

图2

该代码是我原始函数的一个小示例,但足以向您展示我的问题。我试图将绘图保存到对象中,但由于它是基础 R,我不能(或者至少它不能正常工作)。我知道我可以这样做,ggplot2但是,我想在这里问一下,以防有人知道如何在这种情况下进行演示,然后再更改完整的原始功能。

有谁知道如何解决它?

首先十分感谢

问候

4

2 回答 2

1

感谢@tpetzoldt 和这篇文章,我找到了我需要的东西!

我不得不稍微改变一下函数并在循环内创建演示文稿的标题。

这是解决方案:

---
title: "Create a presentation with several plots"
output:
    ioslides_presentation
---

```{r, echo=FALSE}
myfunction <- function(x, gene){
    # This to draw both plots
      par(mfrow=c(2,1))  
      
      stripchart(x, method="jitter", vertical=F, main=paste0("Plot of ", gene))
      
      hist(x, main=paste0("Plot of ", gene))
}
```

```{r, echo=FALSE}
list_genes <- c("GEN1", "GEN2", "GEN3")
```


```{r, echo = FALSE, results = "asis"}
for(gene in list_genes){
  cat("\n\n## Plot of ", gene, "\n\n")
  myfunction(x=c(1,5,6,2,4,30,23,12,45), gene)
}
```
于 2021-11-17T10:35:03.410 回答
1

有几种方法可以得到这个。恕我直言,最简单的方法是从函数中取出mfrowmfcol调用并为所有绘图创建一个全局函数,例如:

---
title: "My presentation"
output: ioslides_presentation
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

## PLOTS

```{r}
list_genes <- c("GEN1", "GEN2", "GEN3")

myfunction <- function(x,y){
  for(gene in list_genes){
    stripchart(x, method = "jitter", vertical = FALSE, 
               main = paste0("Plot of ", gene))
    hist(x, main = paste0("Plot of ", gene))
  }
}

par(mfcol = c(2, 3))
myfunction(x = c(1, 5, 6, 2, 4, 30, 23, 12, 45))
```

带有 6 个图的幻灯片

附加说明:最好使用FALSE而不是FR代码中。FALSE是一个保留字,而F它是“脆弱的”,因为它可以重新定义。

于 2021-11-16T16:30:38.470 回答