从 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_vcf
、b_vcf
、c_vcf
的列表,其中每个列表都包含一个同名元素,那么以下将工作:
for(i in mysamples){
vcf <- mget(i)
a <- vcf[[i]]@rowRanges
}
但是,请记住你每次都覆盖了a
,所以在循环完成后,你只会将c_vcf$c_vcf@rowRanges
的值写入a
。
我正在尝试从 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_vcf
、b_vcf
、c_vcf
的列表,其中每个列表都包含一个同名元素,那么以下将工作:
for(i in mysamples){
vcf <- mget(i)
a <- vcf[[i]]@rowRanges
}
但是,请记住你每次都覆盖了a
,所以在循环完成后,你只会将c_vcf$c_vcf@rowRanges
的值写入a
。