将lappy函数更改为for循环

将lappy函数更改为for循环,r,apply,R,Apply,如何将此lappy更改为for循环: subsignals <- lapply(c(peakind$freqindex, midindex+1), function(x){ upperind <- x fsub <- f notnullind <- ((fsub$freqindex >= lowerind & fsub$freqindex < upperind) |

如何将此
lappy
更改为
for
循环:

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))
})

subignals注意,这没有经过测试,因为如果没有额外的数据,您的问题目前无法再现。这里的关键是重新构造以前提供给函数的
x
值。我们通过显式创建要循环的值向量(
loop.vec
)来实现这一点,然后对于循环中的每个迭代,将该向量中的值分配给
upperind
(for循环中的第一行)

f
f <- # NEED TO ASSIGN f HERE
midindex <- # NEED TO ASSIGN midindex HERE
lindex <- # NEED TO ASSIGN
loop.vec <- c(peakind$freqindex, midindex+1))
subsignals <- vector("list", length(loop.vec))  # pre-allocate
lowerind <- loop.vec[[1]] # I'M GUESSING HERE

for(i in seq_along(loop.vec) {
  upperind <- loop.vec[[i]]
  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
  subsignals[[i]] <- Re(fft(fsub$coef, inverse=TRUE)/length(fsub$coef))
}