R语言:如何向reduce()函数传递Grange对象列表实现合并?
如何用Signac的
reduce()合并列表中的多个GRanges对象 我尝试用Signac包的reduce()函数在R中合并多个GRanges对象,这些对象存储在一个列表里,但不知道如何正确将列表传递给reduce()函数。
我试过以下代码:
reduce(x = granges) reduce(x = unlist(granges)) reduce(x = c(unlist(granges)))
但均返回错误:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function 'reduce' for signature '"list"'
可见对象仍被识别为列表类型。目前只有手动逐个索引元素的代码可行:
reduce(x = c(granges[[1]],granges[[2]],granges[[3]]))
希望找到更简便的实现方式。
解决方法
你需要先将列表中的所有GRanges对象合并为一个单独的GRanges对象,再传入reduce()。可以用do.call()结合c()来批量合并列表元素,无需手动索引每个元素:
# 合并列表中的GRanges对象 combined_gr <- do.call(c, granges) # 执行reduce操作 reduced_gr <- reduce(combined_gr)
也可以直接一步完成:
reduced_gr <- reduce(do.call(c, granges))
说明
do.call(c, granges)会自动将c()函数应用到列表granges的每一个元素上,效果等同于手动写c(granges[[1]], granges[[2]], ...),最终生成一个单一的GRanges对象。- 之前使用
unlist()失败的原因是:unlist()处理GRanges列表时,返回的是普通R列表而非GRanges对象,导致reduce()无法找到适配的方法。
内容的提问来源于stack exchange,提问作者rdv
相关产品推荐
相关产品推荐

