需要帮助来理解r中的一个函数

时间:2014-01-13 17:14:15

标签: r

我正在尝试理解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

1 个答案:

答案 0 :(得分:2)

似乎代码在由fsub中相邻条目之间的差异定义的块中迭代peakind。据推测,peakind包含fsub中的有趣点。您可以看到这一点,因为大多数fsub比较都在x(来自peakind)和lowerind之间,后者被设置为先前的循环{{1 } / x值。

  1. upperind将是一个逻辑向量(TRUE,FALSE),对于notnullind中的行,在此迭代fsub和之前的行之间以及基于其他内容的行中为TRUE在peakind$freqindex,我无法告诉你b / c代码中的变量未定义。
  2. 该行将lindex中不符合上述条件的所有值设置为零
  3. fsub$coef是通过lowerind<<-upperind运行的函数之外的全局赋值。这允许lapply运行的函数跟踪lapply循环中对同一函数的上一次调用的最后upperind。赋值必须是全局的,否则在lapply中的每次迭代后该值都将丢失。
  4. 基本上,该函数对lapply中定义的相邻索引值对之间fft之间的数据进行fsub

    请注意3.建议您的功能不是以最佳方式构建的。除非你真的不能,否则你通常应该避免全局任务。在这种情况下,我会循环遍历peakind行,其中包含您每次迭代所关注的索引范围。