我有两个数据帧(eeg
和p1_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
希望您能帮助我。
答案 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
您可以重新编写循环以使用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])
}
}
您还可以重新编写循环以在数据帧上使用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])
}
}