R l oop над вектором несколько раз - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть серия кодов для каждого образца. (n = 35) По сути, я занимаюсь фильтрацией некоторых геномов c windows по их количеству прочитанных комментариев.

df1 <- df[df[,1]>30,]
df1 <- setDT(df1, keep.rownames = TRUE)[]
df1 <- df1[,-(2:36)]
df1 <- separate(df1, "rn", c("chr","start","end"), sep = "-", remove = TRUE)
write.table(df1, "df1.txt", sep = "\t", col.name = FALSE, row.names = FALSE, quote = FALSE)
dm_regions1 = read_regions(con = "df1.txt", genome = 'hg19',  format = 'bed')
dm_annotated1 = annotate_regions(regions = dm_regions1, annotations = annotations, ignore.strand = TRUE, quiet = FALSE)
dm_annsum1 = summarize_annotations(annotated_regions = dm_annotated1, quiet = TRUE)

Теперь я пытаюсь написать al oop для всех образцов. Все «1» в вышеприведенных кодах следует изменить на for (я в 1:35) Например, первая строка df[i] <- df[df[,i]>30,].

Для первого кода мой l oop выглядит так, и он работал

for(i in 1:35){
  assign(sprintf('df%d', i), 
         value = df[df[,i] > 30,, drop = FALSE])
}

Но я, когда я запускал второй l oop результаты оказались не такими, как я ожидал.

for(i in 1:35){
  df[i] <- setDT(df[i], keep.rownames = TRUE)[]
  df[i] <- df[i][,-(2:36)]
  df[i] <- separate(df[i], "rn", c("chr","start","end"), sep = "-", remove = TRUE)
}

Мой вопрос: как l oop над самим вектором? Кроме того, я могу запустить все эти коды в одном большом l oop?

Кадр данных выглядит так после первого кода:

X1ME.bam.counts X2ME.bam.counts X3ME.bam.counts X4ME.bam.counts X5ME.bam.counts X6ME.bam.counts X7ME.bam.counts
chr1-1119901-1120200                  26              44              37              25              30              35              36
chr1-1120201-1120500                  22              39              41              22              29              41              40
chr1-121133101-121133400              11              24              31              17              29              23              25
chr1-121351501-121351800              21              39              36              34              40              35              42
chr1-121351801-121352100             107             129             102             118             115             119             119
chr1-121352101-121352400             152             173             145             169             153             157             153
chr1-121352401-121352700             101             118             100             133             111             121             112
chr1-121352701-121353000              49              69              65              75              57              77              67
chr1-121353001-121353300              89             106             107             111              96             105              82
chr1-121353301-121353600              64              64              72              78              68              79              68

Спасибо @DanielBonnery Вот ответ:

L<-lapply (1:35,function(i){
  df1 <- df[df[,i]>30,]
  df1 <- setDT(df1, keep.rownames = TRUE)[]
  df1 <- df1[,1]
  df1 <- separate(df1, "rn", c("chr","start","end"), sep = "-", remove = TRUE)
  write.table(df1, paste0("df",i,".txt"), sep = "\t", col.name = FALSE, row.names = FALSE, quote = FALSE)
  dm_regions = read_regions(con = paste0("df",i,".txt"), genome = 'hg19',  format = 'bed')
  dm_annotated = annotate_regions(regions = dm_regions, annotations = annotations, ignore.strand = TRUE, quiet = FALSE)
  dm_annsum = summarize_annotations(annotated_regions = dm_annotated, quiet = TRUE)
  return(list(dm_annsum=dm_annsum))
})

1 Ответ

1 голос
/ 21 февраля 2020
L<-lapply (2:35,function(i){
df1 <- df[df[,i]>30,]
df1 <- setDT(df1, keep.rownames = TRUE)[]
df1 <- df1[,c(1,i)]
df1 <- separate(df1, "rn", c("chr","start","end"), sep = "-", remove = TRUE)
write.table(df1, paste0("df",i,".txt"), sep = "\t", col.name = FALSE, row.names = FALSE, quote = FALSE)
dm_regions1 = read_regions(con = paste0("df",i,".txt"), genome = 'hg19',  format = 'bed')
dm_annotated1 = annotate_regions(regions = dm_regions1, annotations = annotations, ignore.strand = TRUE, quiet = FALSE)
dm_annsum1 = summarize_annotations(annotated_regions = dm_annotated1, quiet = TRUE)
return(list(dm_annotated=dm_annotated1,dm_annsum=dm_annsum1,dm_regions=dm_regions1))
})
#summary annotations for i=2: 
L[[2]]$dm_annsum
#summary regions for i=2: 
L[[2]]$dm_regions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...