R:将文件名传递给参数

时间:2018-10-13 18:45:38

标签: r bioinformatics

当前正在根据物种列表(行分隔)处理生物信息图。我覆盖了五个基因,并且正在产生匹配物种的重叠(即核糖体基因覆盖率比较)。

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 

对于较长的帖子,我深表歉意。

1 个答案:

答案 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()