我需要在多个条件下循环(多次创建三个不同的对象),并嵌套一个循环。 我这样写:
metaxcan <- c("foo1.csv", "foo2.csv")
predix_asso <- c("soo1.csv", "soo2.csv")
for (i in metaxcan){
for (j in predix_asso){
PGC<-read.csv(i, header=T, sep=",")
asociacion<-read.table(j, header=T, sep="")
PGC_predix <- merge(PGC,asociacion,by="gene")
ngenes<-nrow(PGC_predix_1)
print(ngenes)
}
}
但是它不会打印2个数字(foo1和soo1之间的合并;以及foo2和soo2合并),而是打印4个数字(所有交互)
我该怎么办? 谢谢
答案 0 :(得分:0)
未经测试,但仅使用一个循环就足够了吗?
metaxcan <- c("foo1.csv", "foo2.csv")
predix_asso <- c("soo1.csv", "soo2.csv")
for (i in metaxcan){
PGC<-read.csv(i, header=T, sep=",")
asociacion<-read.table(i, header=T, sep="")
PGC_predix <- merge(PGC,asociacion,by="gene")
ngenes<-nrow(PGC_predix_1)
print(ngenes)
}
答案 1 :(得分:0)
我相信您对于for循环的工作方式感到困惑。运行下面的代码,您将能够看到它如何完全使用i和j的输入。
for(i in metaxcan)for(j in predix_asso)print(paste(i,j))
对于您的问题,我建议使用一个for循环:
for(i in seq_along(metaxcan)){
PGC <- read.csv(metaxcan[i], header = TRUE, sep = ",")
asociacion<-read.table(predix_assp[i], header=T, sep = "")
PGC_predix <- merge(PGC, asociacion, by = "gene")
print(ngenes <- nrow(PGC_predix))
}
我在这里使用seq_along
,它将沿着metaxcan的长度生成一个整数矢量(类似于1:length(metaxcan)
,但可以处理长度为0且无错误的情况)