R语言基于自定义函数为数据框列表批量新增intragenic列
实现方案
符合需求的一行代码
你可以直接用lapply遍历列表中的每个数据框,结合你写的flag_annot函数完成新增列操作:
grange_list <- lapply(grange_list, function(df) cbind(df, intragenic = sapply(df$annotation, flag_annot)))
如果需要结合你提到的annotation列提取方法和mapply实现,写法如下:
grange_list <- mapply(cbind, grange_list, intragenic = lapply(lapply(grange_list,'[',,'annotation'), function(x) sapply(x, flag_annot)), SIMPLIFY = FALSE)
更简洁的优化写法
其实不需要单独自定义函数也可以实现需求,直接用向量化匹配,代码更简洁运行效率更高:
grange_list <- lapply(grange_list, function(x) transform(x, intragenic = as.integer(grepl("UTR|Intron|Exon", annotation, ignore.case = T))))
运行后列表里的每个数据框都会新增intragenic列,annotation列包含UTR/Intron/Exon任意一种的取值为1,其余为0。
内容的提问来源于stack exchange,提问作者moth
相关产品推荐
相关产品推荐

