首页 > 解决方案 > if/else grepl "参数长度为零"

问题描述

我想对位于列表中的多个数据帧执行一组操作(在 R 中)。特别是,我为每一个创建了一个“库”列,然后用于确定要执行哪种过滤操作。这是实际的代码:

sampleList <- list(RNA1 = "data/not_processed/dedup.Bp1R4T2_S2.txt",
              RNA2 = "data/not_processed/dedup.Bp1R4T3_S4.txt",
              RNA3 = "data/not_processed/dedup.Bp1R5T2_S1.txt",
              RNA4 = "data/not_processed/dedup.Bp1R5T3_S2.txt",
              RNA5 = "data/not_processed/dedup.Bp1R14T5_S1.txt",
              RNA6 = "data/not_processed/dedup.Bp1R14T6_S1.txt",
              RNA7 = "data/not_processed/dedup.Bp1R14T6_S2.txt",
              RNA8 = "data/not_processed/dedup.Bp1R14T7_S2.txt",
              RNA9 = "data/not_processed/dedup.Bp1R14T8_S3.txt",
              RNA10 = "data/not_processed/dedup.Bp1R14T9_S3.txt",
              RNA11 = "data/not_processed/dedup.Bp1R14T9_S4.txt",
              DNA1 = "data/not_processed/dedup.dna10_1_S4.txt",
              DNA2 = "data/not_processed/dedup.dna10_2_S5.txt",
              DNA3 = "data/not_processed/dedup.dna10_3_S6.txt",
              DNA4 = "data/not_processed/dedup.dna50_1_S1.txt",
              DNA5 = "data/not_processed/dedup.dna50_2_S2.txt",
              DNA6 = "data/not_processed/dedup.dna50_3_S3.txt",
              DNA7 = "data/not_processed/dedup.dna50_pcrcocktail_S7.txt")

batch <- lapply(names(sampleList),function(mysample){
  aux <- read.table(sampleList[[mysample]], col.names=c(column1, column2, ..., ID, library, column4, etc...))
  aux %>% mutate(library = mysample, R = Fw_ref + Rv_ref, A = Fw_alt + Rv_alt) %>% distinct(ID, .keep_all=T)
  if (grepl("DNA", aux$library)){
    aux %>% filter(aux$R>1 & aux$A>1)
  } else {
    aux %>% filter((aux$R+aux$A)>7 & aux$Fw_ref>=1 & aux$Rv_ref>=1 & aux$Fw_alt>=1 & aux$Rv_alt>=1)
  }
  aux
})

batch_file <- do.call(rbind, batch)
write.table(batch_file, "data/batch_file.txt", col.names = T, sep = "\t")

库列的可能值是 DNA1 到 DNA7,RNA1 到 11。我也尝试使用“char”%in%,但它给出了同样的问题:

if (grepl("DNA", aux$library)) { 中的错误:参数长度为零

似乎 if 条件无法识别库中的值。但是,当我尝试在 batch_file 上应用 if/else 条件时(未过滤,基本上是用这段代码获得的,没有 if/else 部分)它工作得很好。

提前谢谢了。

标签: r

解决方案


推荐阅读