for循环中长度为0的参数

时间:2020-05-13 08:22:03

标签: r loops dataframe

我有两个数据帧(eegp1_1_a)和一个空列表(list):

> head(eeg)
  wave_1
1 18.959
2 19.432
3 20.384
4 20.489
5 21.012
6 21.571

> nrow(eeg)
[1] 849

> head(p1_1_a)
      Time  Latency Amplitude Peak_Lenght
1  57.1184  7.90738 -0.388889     8.44690
2 123.3470 15.49230 -0.917778     5.51634
3 191.0920 11.87220 -0.466667     6.55066
4 249.1710 15.49230 -0.871111     5.68873
5 325.5090 10.32080 -0.388889     5.34396
6 385.6040 12.56180 -0.684444     4.82680

> nrow(p1_1_a)
[1] 10

> list <- c()

我想创建一个列表,该列表由eeg$wave_1中的值组成,这些值是与p1_1_a$Time中的每个值最接近的较小值。因此,对于p1_1_a$Time中第一个索引值为57.1184,eeg $ wave_1中最接近的较小值将是56.678(索引48)。因此,最终列表将有10行,其值来自eeg$wave_1

我写了这个循环:

for(i in 1:nrow(p1_1_a$Time)){
  if(eeg$wave_1 <= p1_1_a$Time[i]){
    list <- max(eeg$wave_1 <= p1_1_a$Time[i])
  }
}

但是我得到了错误:

1:nrow(p1_1_a $ Time)中的错误:参数长度为0

希望您能帮助我。

1 个答案:

答案 0 :(得分:1)

问题

nrow是要在数据帧上调用的函数。 p1_1_a是一个数据帧。 p1_1_a$Time是一个列表。

nrow(p1_1_a$Time)的计算结果为NULL,因此您的错误消息告诉您。如果您尝试这样做,这是有道理的:

for(i in 1:NULL){
  print(i)
}

期待看到:

1:NULL中的错误:参数长度为0

解决方案1 ​​

您可以重新编写循环以使用length而不是nrow,因为您要遍历列表(数据框中的一列是列表):

for(i in 1:length(p1_1_a$Time)){
  if(eeg$wave_1 <= p1_1_a$Time[i]){
    list <- max(eeg$wave_1 <= p1_1_a$Time[i])
  }
}

解决方案2

您还可以重新编写循环以在数据帧上使用nrow,因为它是在数据帧(而不是列表)上调用的函数:

for(i in 1:nrow(p1_1_a)){
  if(eeg$wave_1 <= p1_1_a$Time[i]){
    list <- max(eeg$wave_1 <= p1_1_a$Time[i])
  }
}