R кратно для цикла

#r #loops

#r #циклы

Вопрос:

У меня есть этот цикл над файлом msp.chr1

 for(i in names(msp.chr1[c(7:70)])){
  tmp <- rle(msp.chr1[[i]])$lengths
  msp.chr1$idx <- rep(1:length(tmp),tmp)
  tmp2 <- unlist(by(msp.chr1[msp.chr1[[i]]==1,], list(msp.chr1$idx[msp.chr1[[i]]==1]),function(x){tail(x["epos"],1)-head(x["spos"],1)}))
  assign(paste(i, ".chr1", sep=""), as.vector(tmp2))
  rm(i); rm(tmp); rm(tmp2)
}
  

Этот файл представляет собой фрейм данных с несколькими столбцами:

 head(msp.chr1)
 chm   spos   epos sgpos egpos nsnps PDAC1.0 PDAC1.1 PDAC10.0 PDAC10.1 PDAC100.0 PDAC100.1 PDAC101.0 PDAC101.1 PDAC102.0 PDAC102.1 PDAC103.0 PDAC103.1
1   1 123492 134160  0.12  0.13   252       0       0        0        0         1         0         0         0         0         0         0         0
2   1 134160 135025  0.13  0.14    20       0       0        0        0         1         0         0         0         0         0         0         0
3   1 135025 145600  0.14  0.15   150       0       0        0        0         1         0         0         0         0         0         0         0
4   1 145600 316603  0.15  0.32   195       0       1        0        0         1         0         0         1         0         0         0         1
5   1 316603 520140  0.32  0.52   765       0       0        0        0         0         0         0         0         0         0         0         0
6   1 520140 667054  0.52  0.67  1080       0       0        0        0         0         0         0         0         0         0         0         0
  PDAC104.0 PDAC104.1 PDAC105.0 PDAC105.1 PDAC11.0 PDAC11.1 PDAC12.0 PDAC12.1 PDAC13.0 PDAC13.1 PDAC14.0 PDAC14.1 PDAC15.0 PDAC15.1 PDAC17.0 PDAC17.1
1         0         0         0         0        0        0        0        0        0        0        1        0        0        0        0        1
2         0         0         0         0        0        0        0        0        0        0        1        0        0        0        0        1
3         0         0         0         0        0        0        0        0        0        0        1        0        0        0        0        1
4         0         1         0         0        0        0        0        0        0        0        0        0        0        0        0        0
5         0         0         0         0        0        0        0        0        0        0        0        0        0        0        0        0
6         0         0         0         0        0        0        0        0        0        0        0        0        0        0        0        0
  PDAC18.0 PDAC18.1 PDAC19.0 PDAC19.1 PDAC2.0 PDAC2.1 PDAC20.0 PDAC20.1 PDAC21.0 PDAC21.1 PDAC22.0 PDAC22.1 PDAC23.0 PDAC23.1 PDAC24.0 PDAC24.1 PDAC25.0
1        0        0        1        0       0       0        0        0        1        0        0        0        0        0        0        0        0
2        0        0        1        1       0       0        0        0        1        0        0        0        0        0        0        0        0
3        0        0        0        1       0       0        0        0        1        0        0        0        0        0        0        0        0
4        0        0        0        1       0       0        0        0        0        0        0        0        0        0        0        0        0
5        0        0        0        0       1       0        0        0        1        0        0        0        0        0        0        0        0
6        0        0        0        0       0       0        0        0        1        0        0        0        0        0        0        0        0
  PDAC25.1 PDAC3.0 PDAC3.1 PDAC4.0 PDAC4.1 PDAC5.0 PDAC5.1 PDAC6.0 PDAC6.1 PDAC7.0 PDAC7.1 PDAC8.0 PDAC8.1 PDAC807.0 PDAC807.1 PDAC810.0 PDAC810.1
1        0       0       0       0       0       0       1       1       0       0       0       0       0         0         0         0         0
2        0       0       0       0       0       0       1       1       0       0       0       0       0         0         0         0         0
3        0       0       0       0       0       0       1       1       0       0       0       0       0         0         0         0         0
4        0       0       0       0       0       0       0       0       0       0       0       0       0         0         0         0         0
5        0       0       0       0       0       0       0       0       0       0       1       0       0         0         0         0         0
6        0       0       0       0       0       0       0       0       0       0       1       0       0         0         0         0         0
  PDAC9.0 PDAC9.1 idx
1       0       0   1
2       0       0   1
3       0       0   1
4       0       0   1
5       1       0   1
6       1       0   1

for(i in names(msp.chr1[c(7:70)])){
  tmp <- rle(msp.chr1[[i]])$lengths
  msp.chr1$idx <- rep(1:length(tmp),tmp)
  tmp2 <- unlist(by(msp.chr1[msp.chr1[[i]]==1,], list(msp.chr1$idx[msp.chr1[[i]]==1]),function(x){tail(x["epos"],1)-head(x["spos"],1)}))
  assign(paste(i, ".chr1", sep=""), as.vector(tmp2))
  rm(i); rm(tmp); rm(tmp2)
}
  

Но на самом деле у меня есть 23 файла с именами msp.chr1, msp.chr2, …, msp.chr23.

Я хочу добавить еще один цикл к приведенному выше, чтобы сделать это для всех файлов одновременно.

Я пробовал несколько вещей, но это не работает… По сути, каждый chr1 в моем цикле (включая в назначении) должен быть заменен на chr1 на chr23.

Можете ли вы помочь?

Спасибо,

Комментарии:

1. не могли бы вы, пожалуйста, объяснить, что такое msp.chrX? и добавить рабочий пример этого?

Ответ №1:

Вы можете сгенерировать имя файла с paste помощью , а затем получить файл по его имени с get помощью . Лучшим вариантом было бы создать эти файлы в списке, тогда вы использовали бы только j подобное df=list[[j]] .

 for(j in 1:23){
  df = get(paste("msp.chr",j,sep=""))
  for(i in names(df[c(7:70)])){
    tmp <- rle(df[[i]])$lengths
    df$idx <- rep(1:length(tmp),tmp)
    tmp2 <- unlist(by(df[df[[i]]==1,], list(df$idx[df[[i]]==1]),function(x){tail(x["epos"],1)-head(x["spos"],1)}))
    assign(paste(i, ".chr1", sep=""), as.vector(tmp2))
    rm(i); rm(tmp); rm(tmp2)
  }
}
  

Комментарии:

1. Спасибо! Он не работает, в этом цикле все еще встречается «msp.chr1»

2. Я отредактировал, и я думаю, что это работает, проведя несколько тестов, прежде чем принять ответ!

3. Я не мог проверить это, так как у меня не было всех файлов, но я исправил пропущенное событие!