在for循环中打印多个文件的ggplots

时间:2017-09-05 21:28:46

标签: r loops

我正在尝试浏览并打印目录中各个文件的许多不同数据集的小提琴图的单个PDF文件。我创建了一系列for循环来完成它们:

library(ggplot2)
library(tidyr)
library(hmisc)

myfiles<-dir()
plot_list=list()`

for (i in 1:length(myfiles)){
     dfx<-read.table(file=myfiles[i], header=TRUE, sep="\t", quote="")
     dfx %>% gather("gene","expression",2:8)
     #dfx2<-gather(dfx, "gene","expression",2:8)
     p<-ggplot(dfx,aes(x=gene,y=expression, fill=gene)) + 
     geom_violin(scale="width", trim=FALSE) + 
     stat_summary(fun.data="mean_sdl", mult=1, geom="pointrange", 
     color="black", size=0.3)
     plot_list[[i]]=p
}

但是,在第一个for循环后,我不断收到以下错误:Error: position must be between 0 and n

通过篡改它,看起来这是收集功能的一个问题,而不是识别第二到第八列变成键值对。任何人都可以提供一些有关为何发生这种情况的见解吗?

值得注意的是,当我在一个文件的for循环中测试脚本时,我的数据帧(dfx)在收集函数之前看起来如此:

>head(dfx, n=6L)

                                Sample        A3A        A3B      A3C
1 00507d23-fbf3-4363-beff-aea03f9c5d2b 0.03121353 0.30252324 4.152817
2 008b8100-7bd6-4224-998c-700863de51da 0.03029060 0.12682751 1.783519
3 00bf9b15-1ee8-4083-aeca-7b01e2ebbf72 0.02288048 0.09821837 1.198759
4 030890e1-dcc7-4a16-9ff3-a7bfd259b471 0.14018837 0.25924818 2.843870
5 03248d19-cb6a-4578-9759-c0c4de048920 0.05629487 0.14414294 2.370515
6 03bc1d49-07fe-41ec-8064-28861c25eebb 0.02869719 0.13016301 3.834980
         A3D       A3F        A3G        A3H
1 0.49064339 0.5746080 1.36810941 0.33271714
2 0.03835540 0.1835935 0.14274570 0.04757876
3 0.02461852 0.1755424 0.03669695 0.04730084
4 0.19313735 0.5151350 1.00295535 0.20449874
5 0.34363224 0.2372394 0.39013512 0.08738450
6 0.19863243 0.4579626 0.47219715 0.10500037

在收集功能之后(再次不在for循环中):

>head((dfx %>% gather("gene","expression",2:8),n=6L)

                                Sample gene expression
1 00507d23-fbf3-4363-beff-aea03f9c5d2b  A3A 0.03121353
2 008b8100-7bd6-4224-998c-700863de51da  A3A 0.03029060
3 00bf9b15-1ee8-4083-aeca-7b01e2ebbf72  A3A 0.02288048
4 030890e1-dcc7-4a16-9ff3-a7bfd259b471  A3A 0.14018837
5 03248d19-cb6a-4578-9759-c0c4de048920  A3A 0.05629487
6 03bc1d49-07fe-41ec-8064-28861c25eebb  A3A 0.02869719

另一方面,在一次简短的尝试中,我也看了一个类似的问题:gather with tidyr: position must be between 0 and n error并编辑了行dfx%&gt;%gather(“gene”,“expression”,2:8)到dfx%&gt;%聚集(“基因”,“表达”,c(2:8))但无济于事。

0 个答案:

没有答案