我正在尝试理解R.中的一个函数。请你为我声明它的一部分:
功能是:
subsignals <- lapply(c(peakind$freqindex, midindex+1), function(x){
upperind <- x
fsub <- f
notnullind <- ((fsub$freqindex >= lowerind
& fsub$freqindex < upperind)
|
(fsub$freqindex > (lindex - upperind + 2)
& fsub$freqindex <= (lindex - lowerind + 2)))
fsub[!notnullind,"coef"] <- 0
lowerind <<- upperind
Re(fft(fsub$coef, inverse=TRUE)/length(fsub$coef))
})
有人可以解释一下:
1 - notnullind
的内容可能是什么,一般来说,这部分代码的作用是什么:
notnullind <- ((fsub$freqindex >= lowerind
& fsub$freqindex < upperind)
|
(fsub$freqindex > (lindex - upperind + 2)
& fsub$freqindex <= (lindex - lowerind + 2)))
2 - fsub[!notnullind,"coef"] <- 0
是什么意思?
3 - <<-
中的lowerind <<- upperind
是什么意思?
进一步资料:
peakind
看起来像这样:
coef freqindex
9 2.714391+3.327237i 9
17 1.273340+4.023808i 17
25 -0.445424+5.674848i 25
33 -1.378107+3.182281i 33
41 -2.798383+2.340895i 41
49 -4.479888+1.095193i 49
和fsub
:
coef freqindex
1 19.2352397+0.0000000i 1
2 -0.4799684+0.1651822i 2
3 1.5235726+0.0790459i 3
4 -0.1165587+0.1217513i 4
5 2.2376900+1.6763410i 5
6 1.1256711+0.4624819i 6
.....
102 -0.1165587-0.1217513i 102
103 1.5235726-0.0790459i 103
104 -0.4799684-0.1651822i 104
答案 0 :(得分:2)
似乎代码在由fsub
中相邻条目之间的差异定义的块中迭代peakind
。据推测,peakind
包含fsub
中的有趣点。您可以看到这一点,因为大多数fsub
比较都在x
(来自peakind
)和lowerind
之间,后者被设置为先前的循环{{1 } / x
值。
upperind
将是一个逻辑向量(TRUE,FALSE),对于notnullind
中的行,在此迭代fsub
和之前的行之间以及基于其他内容的行中为TRUE在peakind$freqindex
,我无法告诉你b / c代码中的变量未定义。lindex
中不符合上述条件的所有值设置为零fsub$coef
是通过lowerind<<-upperind
运行的函数之外的全局赋值。这允许lapply
运行的函数跟踪lapply
循环中对同一函数的上一次调用的最后upperind
。赋值必须是全局的,否则在lapply
中的每次迭代后该值都将丢失。基本上,该函数对lapply
中定义的相邻索引值对之间fft
之间的数据进行fsub
。
请注意3.建议您的功能不是以最佳方式构建的。除非你真的不能,否则你通常应该避免全局任务。在这种情况下,我会循环遍历peakind
行,其中包含您每次迭代所关注的索引范围。