当前正在根据物种列表(行分隔)处理生物信息图。我覆盖了五个基因,并且正在产生匹配物种的重叠(即核糖体基因覆盖率比较)。
RScript VennGenSpec.R Gene1Spec Gene2Spec Gene3Spec Gene4Spec Gene5Spec Output
现在,我正在以pdf格式生成五组维恩图,但想推广该功能以允许使用不同数量的物种集。如何生成一些读取可变数量列表的循环? (例如,根据输入的数量,生成4组毒液,其中7组)。
# install venn package
# install.packages("venn")
library("venn")
# load taxa lists
args <- commandArgs(trailingOnly = TRUE)
fia<-args[1]
fib<-args[2]
fic<-args[3]
fid<-args[4]
fie<-args[5]
out<-args[6]
##get lists
a<-read.table(fia)
b<-read.table(fib)
c<-read.table(fic)
d<-read.table(fid)
e<-read.table(fie)
#set pdf output
pdf(paste(out,"pdf",sep="."))
#plot venn
venn(list(a[,1],b[,1],c[,1],d[,1],e[,1]), snames = c("G1","G2","G3","G4","G5"), counts = NULL, ellipse = FALSE, zcolor = "style", size = 15, cexsn = 1, borders = TRUE)
维恩样本输出:VennExample
for (i in (1:(arguments-1)) ) {
fi[i] <-args[i]
}
else
output <-args[last]
for (i in (arguments -1) ) {
ta[i] <-read.table(fi[i])
}
sys.call
match.call
还希望将物种列表的名称传递到图表本身中(其中snames是)。我上面的样机名称是G1基因1等...
batch_args <- read.table(args[1], sep=",")
for
对于较长的帖子,我深表歉意。
答案 0 :(得分:1)
没有数据来测试代码,无法知道以下内容是否满足您的要求,但至少显然与您的代码等效并且更为简单。
它一次性读取所有data.frame,并将它们保存在列表fi
中。然后,提取每个df的第一列,并将结果向量列表传递给venn
。
library("venn")
# load taxa lists
args <- commandArgs(trailingOnly = TRUE)
n <- length(args)
fi <- args[-n]
out <- args[n]
##get lists
a <- lapply(fi, read.table)
##get first column of each data.frame
a1 <- lapply(a, `[[`, 1)
#set pdf output
pdf(paste(out, "pdf", sep = "."))
#plot venn
venn(a1,
snames = paste0("G", seq_along(a1)),
counts = NULL, ellipse = FALSE,
zcolor = "style", size = 15,
cexsn = 1, borders = TRUE
)
dev.off()