我正在尝试从数据帧中过滤出行,并将生成的较短的数据帧写入新文件。 我可以尝试处理单个文件,但是尝试使用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
答案 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)