1

我已经在网上搜索了这个没有太多运气。或多或少您总是从VariantAnnotation Package中获得示例。而且由于这个示例在我的计算机上运行良好,我不知道为什么我创建的 VCF 不能。

问题:我想确定选定基因中 SNP 的数量和位置。我有一个大型 VCF 文件(超过 5GB),其中包含有关几种小鼠品系所有染色体上所有 SNP 的信息。显然,如果我尝试在整个基因组规模上做任何事情,我的计算机就会死机,所以我首先确定了 1 号染色体上感兴趣基因的基因组位置。然后我使用 VariantAnnotation 包从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
  )

上面的代码取自我编写的以应变为参数的函数。gnrng 指的是一个包含我感兴趣的基因的基因组位置的 GRanges 对象。

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

这工作正常,我得到了我的 vcf (dim: 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,我会得到同样的错误。

我希望我说清楚了......任何帮助将不胜感激!提前致谢!

4

2 回答 2

2

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

问题是您从“固定”字段中选择性地导入了“过滤器”,而不是“ALT”。writeVcf() 抛出错误,因为没有 ALT 值可以写出。如果您无法访问带有修复程序的版本,解决方法是导入 ALT 字段。

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

您可以查看使用 fixed() 访问器存储了哪些值:

fixed(vcf)

请在 Martin 引用的 Bioconductor 邮件列表中报告错误或问题。更多 Bioc 用户将看到该问题,您将更快地获得帮助。

瓦莱丽

于 2014-03-28T17:57:34.323 回答
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())

成功。

于 2014-03-28T14:00:50.550 回答