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