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

Access slot from S4 object in a list within an R loop

我正在尝试从 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 不起作用。

我该如何解决这个问题?

您不能以这种方式使用 $ 运算符 - 您必须改用 [[ 运算符。因此,如果您的结构按照您的描述设置,即您有名为 a_vcfb_vcfc_vcf 的列表,其中每个列表都包含一个同名元素,那么以下将工作:

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

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