У меня есть два файла. Файл 1 имеет 56632 строк и 4 столбцов, и выглядит следующим образом:rbind error after for loop in R
Id Chr TSS TES
ENSG00000210049 1 63987904 63989904
ENSG00000211459 1 63984904 63985904
ENSG00000210077 1 58941831 58991831
и файл 2 имеет 28895 строк и 3 столбцов, и выглядит следующим образом:
CHR snps POS
1 rs17125090 63988904
1 rs7546938 64677853
1 rs3087585 58971831
Я пытаюсь запустить вложенный цикл чтобы найти для каждой строки в файле 2 строку в файле 1, которая имеет значение в поле 3, которое ближе всего к значению в поле 3 из файла 2, учитывая, что поле 2 из файла 1 и поле 1 из файла 2 соответствуют. Мой код:
genes<-read.table("file1",header=T)
snps<-read.table("file2",header=T)
df<-data.frame()
for(i in 1:10){
i.genes<-data.frame()
i.dist<-data.frame()
for(j in 1:56632){
if((snps[i,1]==genes[j,2]) & (abs(snps[i,3]-genes[j,3])<2000000)){
i.genes<-rbind(i.genes,genes[j,1:3])
i.dist<-rbind(i.dist,abs(genes[j,3]-snps[i,3]))
i.df<-cbind(i.genes,i.dist)
}
}
i.df<-i.df[order(i.df[,4]),]
i.df<-i.df[1,]
i.df2<-cbind(snps[i,1:3],i.df)
colnames(i.df2)<-NULL
df<-rbind.data.frame(df,i.df2)
}
write.table(df,"test.df",quote=F,row.names=F)
Я получаю ошибку Error in pi[[j]] : subscript out of bounds
для линии df<-rbind.data.frame(df,i.df2)
. Может кто-нибудь указать, что происходит не так?
Желаемый результат:
1 rs17125090 63988904 ENSG00000210049 1 63987904 1000
1 rs7546938 64677853 ENSG00000210049 1 63987904 689949
1 rs3087585 58971831 ENSG00000210077 1 58941831 30000
Вы написали 3 имена столбцов в вашем файле 1, тогда как указано, что оно имеет 4 столбца. –
Это поможет, если вы уменьшите свой код до воспроизводимого примера в соответствии с этим: http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Bulat
Таким образом, вы хотите сохранить только эти строки в файле 2, которые удовлетворяют вашему условию, правильно? Каков ваш желаемый результат? –