我在网上搜索了这个没有太多运气。或多或少,您总是从 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 ,我会得到同样的错误。
我希望自己明确表示......任何帮助都将不胜感激! 提前致谢!
答案 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())
成功。