如何使用VariantAnnotation Package将变体调用格式(VCF)文件保存到R中的磁盘

时间:2014-03-27 06:59:52

标签: r bioinformatics bioconductor genome

我在网上搜索了这个没有太多运气。或多或少,您总是从 VariantAnnotation Package 中获得示例。由于这个例子在我的计算机上工作正常,我不知道为什么我创建的VCF没有。

问题:我想确定所选基因中SNP的数量和位置。我有一个大的VCF文件(超过5GB),它有几个小鼠品系所有染色体上所有SNP的信息。显然,如果我尝试在整个基因组范围内做任何事情,我的计算机会冻结,所以我首先确定了染色体1上感兴趣的基因的基因组位置。然后我使用VariantAnnotation Package来获取与我感兴趣的基因有关的数据。 VCF文件:

library(VariantAnnotation)
param<-ScanVcfParam(
  info=c("AC1","AF1","DP","DP4","INDEL","MDV","MQ","MSD","PV0","PV1","PV2","PV3","PV4","QD"), 
  geno=c("DP","GL","GQ","GT","PL","SP","FI"),
  samples=strain, 
  fixed="FILTER",
  which=gnrng
  )

上面的代码取自我写的函数,它以 strain 作为参数。 gnrng是指包含我感兴趣基因的基因组位置的GRanges对象。

vcf<-readVcf(file, "mm10",param)

这很好用,我得到了我的vcf(昏暗:21783 1),但是当我尝试保存时它不起作用

file.vcf<-tempfile()
writeVcf(vcf, file.vcf)
Error in .pasteCollapse(ALT, ",") : 'x' must be a CharacterList

我甚至尝试并行尝试,首先从包中进行示例,然后替换我的VCF文件:

#This is the example:
out1.vcf<-tempfile()
in1<-readVcf(fl,"hg19")
writeVcf(in1,out1.vcf)

这很好用,但如果我只用 in1 替换 vcf ,我会得到同样的错误。

我希望自己明确表示......任何帮助都将不胜感激! 提前致谢!

2 个答案:

答案 0 :(得分:2)

感谢您报告此错误。问题在版本1.9.47(开发分支)中得到修复。修复程序将在4月14日之后的发布分支中提供。

问题是您有选择地从'固定'字段导入'FILTER'而不是'ALT'。 writeVcf()抛出一个错误,因为没有要写出的ALT值。如果您无法访问带有修复程序的版本,则可以解决导入ALT字段的问题。

ScanVcfParam(fixed = c("ALT", "FILTER"))

您可以看到使用fixed()访问器进行了哪些值:

fixed(vcf)

请在Bioconductor邮件列表中报告并报告错误或问题。更多Bioc用户会看到这个问题,你会更快地得到帮助。

瓦莱丽

答案 1 :(得分:0)

这是一个可重现的例子

library(VariantAnnotation)
fl <- system.file("extdata", "chr22.vcf.gz", package="VariantAnnotation")
param <- ScanVcfParam(fixed="FILTER")
writeVcf(readVcf(fl, "hg19", param=param), tempfile())

## Error in .pasteCollapse(ALT, ",") : 'x' must be a CharacterList

问题似乎是writeVcf期望对象有一个'ALT'字段,所以

param <- ScanVcfParam(fixed="ALT")
writeVcf(readVcf(fl, "hg19", param=param), tempfile())

成功。