R循环中列表中S4对象的访问插槽

时间:2020-04-24 15:09:47

标签: r

我正在尝试从R循环中的列表内的对象访问特定的插槽:

mysamples<-'a_vcf', 'b_vcf', 'c_vcf'
for(i in mysamples){
vcf<-mget(i)
a<-vcf$i@rowRanges
}

但这不起作用:

Error in eval(quote(list(...)), env) : 
  trying to get slot "rowRanges" from an object of a basic class ("NULL") with no slots

mget()生成一个名为vcf的列表,其中包含一个名为i的S4对象(例如:a_vcf);但是使用vcf$i代替vcf$a_vcf无效。

我该如何解决?

1 个答案:

答案 0 :(得分:2)

您不能以这种方式使用$运算符-您必须使用[[运算符。因此,如果按照您的描述进行了结构设置,也就是说,您有一个名为a_vcfb_vcfc_vcf的列表,每个列表都包含一个具有相同名称的元素,那么以下内容将工作:

for(i in mysamples){
vcf <- mget(i)
a <- vcf[[i]]@rowRanges
}

但是,请记住您每次都覆盖a,因此在循环完成后,您只会将c_vcf$c_vcf@rowRanges的值写入a