使用lapply

时间:2018-07-09 14:58:35

标签: r filtering lapply

我正在尝试从数据帧中过滤出行,并将生成的较短的数据帧写入新文件。 我可以尝试处理单个文件,但是尝试使用lappy对多个文件运行此过程(并为输出文件指定不同的名称)确实很麻烦。

我正在尝试根据“ aaSeqCDR3”中的值包含“ _”还是“ *”来过滤行

到目前为止,我有:

productseq <-function(x){
#establish filter criteria
filter <- c("\\*", "_")
#Filter data set to new variable
df2 <- df[!grepl(paste(filter, collapse = "|"), df$aaSeqCDR3),]
write.delim(df2, "df2.txt", sep= " ")}

但是尝试将其应用于包含多个数据帧名称(名称)的向量

nameproduct <- lapply(names, productiveseq)

我得到了错误:

UseMethod(“ filter_”)中的

错误:   没有适用于“过滤器”的适用于“字符”类对象的方法

我现在很迷茫,不胜感激。

下面是一个示例数据框:

ID  allDHitsWithScore   allJHitsWithScore   allCHitsWithScore   aaSeqCDR3
0   290 0.031402274 TGTGCCAGCGGCAGCCCCAATTCACCCCTCCACTTT    CASGSPNSPLHF
1   168 0.018191662 TGTGCTCTGAGTGATCAGAATAAGGGCAGGAGAGCACTTACTTTT   CALSDQNKGRRALTF
2   49  0.005305902 TGTGCAGTCTCCAAAGCTGCAGGCAACAAGCTAACTTTT CAVSKAAGNKLTF
3   16  0.001732539 TGCAGTGCTAGAGGGCGCTTAGCCAAAAACATTCAGTACTTC  CSARGRLAKNIQYF
4   15  0.001624256 TGTGCCTGAAGGAATGCAGGCAAATCAACCTTT   CA*RNAGKSTF
5   14  0.001515972 TGCAGTGCTAGAGTTGGACAGGGAGGGTTCTTC   CSARVGQGGFF
6   13  0.001407688 TGTGCCAGCAGTTACTTGGGACAGGGGGGAAACATTCAGTACTTC   CASSYLGQGGNIQYF
7   12  0.001299404 TGTGCCAGCAGTTTATGGGACTAGCGGGGGGTTCGAGCTCCTACAATGAGCAGTTCTTC CASSLWD*RG_SSSYNEQFF

1 个答案:

答案 0 :(得分:5)

由于要传递数据框名称的字符向量,而不是数据框对象本身,因此请在函数内部使用get

此外,请注意您正在写入同一文件 df2.txt ,因此该相同文件将在每次迭代中被覆盖。要解决此问题,请将 x 字符值粘贴到文本文件名。并且请确保返回数据帧,而不是从NULL调用返回的write.delim作为函数的最后一行。

productseq <- function(x) {
    # Retrieve data frame
    df <- get(x)

    # Establish filter criteria
    filter <- c("\\*", "_")

    # Filter data set to new variable
    df2 <- df[!grepl(paste(filter, collapse = "|"), df$aaSeqCDR3),]

    write.delim(df2, paste0(x, ".txt"), sep= " ")

    # Return filtered data
    return(df2)
}

# LIST OF FILTERED DATA FRAMES EACH EXPORTED TO .txt FILE
nameproduct <- lapply(names, productiveseq)