我正在尝试从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
无效。
我该如何解决?
答案 0 :(得分:2)
您不能以这种方式使用$
运算符-您必须使用[[
运算符。因此,如果按照您的描述进行了结构设置,也就是说,您有一个名为a_vcf
,b_vcf
,c_vcf
的列表,每个列表都包含一个具有相同名称的元素,那么以下内容将工作:
for(i in mysamples){
vcf <- mget(i)
a <- vcf[[i]]@rowRanges
}
但是,请记住您每次都覆盖a
,因此在循环完成后,您只会将c_vcf$c_vcf@rowRanges
的值写入a
。