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

时间:2017-02-06 01:53:14

标签: r list s4

这很难做出一个可重复的例子,所以我很抱歉。

我有一个名为mp3List的列表,其中包含wave个对象。我生成它是这样的:它填充了一个列表,其中包含使用readMP3生成的100个波形对象。

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对象,而不必单独拉出每个wave对象。

1 个答案:

答案 0 :(得分:0)

列表中的

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

mp3List[[1]]@left