我正在尝试浏览并打印目录中各个文件的许多不同数据集的小提琴图的单个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))但无济于事。