不能对存储在 R 列表中的 s4 对象使用 @ 运算符?

Can't use @ operator on s4 objects stored in a list in R?

这很难做一个可重现的例子,所以我提前道歉。

我有一个名为 mp3List 的列表,其中包含 wave 个对象。我这样生成它:它用 readMP3.

生成的 100 个 wave 对象填充一个列表
mp3List <- vector("list", 100)
for(i in UrlReadNames)
{
  mp3List[which(UrlReadNames == i)]<-readMP3(i)
}

wave 对象的结构如下所示:

> str(ddd)
Formal class 'Wave' [package "tuneR"] with 6 slots
..@ left     : int [1:14772096] 0 0 0 0 0 0 0 0 0 0 ...
..@ right    : int [1:14772096] 0 0 0 0 0 0 0 0 0 0 ...
..@ stereo   : logi TRUE
..@ samp.rate: num 44100
..@ bit      : num 16
..@ pcm      : logi TRUE

列表中 wave 对象的结构如下所示:

> str(mp3List[1])
List of 1

 $ :Formal class 'Wave' [package "tuneR"] with 6 slots
 .. ..@ left     : int [1:14772096] 0 0 0 0 0 0 0 0 0 0 ...
 .. ..@ right    : int [1:14772096] 0 0 0 0 0 0 0 0 0 0 ...
 .. ..@ stereo   : logi TRUE
 .. ..@ samp.rate: num 44100
 .. ..@ bit      : num 16
 .. ..@ pcm      : logi TRUE

现在我尝试使用 mp3List[1]@left 来访问对象的这一部分,但是我得到这个错误:Error: Attempting to get a "left" slot from an object of a basic class ("list") without slots

我想在列表中的这些对象上使用@,这样我就可以编写 for 循环来访问列表中的每个 wave 对象,而不必单独取出每个对象。

[ 一个列表 returns 一个子列表。要提取 单个组件,请使用[[

mp3List[[1]]@left