使用lapply过滤多个数据集

Mic*_*ley 0 filtering r 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= " ")}
Run Code Online (Sandbox Code Playgroud)

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

nameproduct <- lapply(names, productiveseq)
Run Code Online (Sandbox Code Playgroud)

我收到错误:

UseMethod("filter_")中的错误:没有适用于"filter_"的方法应用于类"character"的对象

我此刻非常迷失,并会欣赏任何见解.

下面是一个示例数据框:

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
Run Code Online (Sandbox Code Playgroud)

Par*_*ait 5

因为您传递的是数据框名称的字符向量而不是数据框对象本身,所以请get在函数内部使用.

另外,请注意您正在写入相同的文件df2.txt,因此每次迭代都会覆盖同一个文件.要解决此问题,请将x字符值粘贴到文本文件名.并确保返回数据帧而不是NULLwrite.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)
Run Code Online (Sandbox Code Playgroud)