我正在尝试创建一个应用于时间序列的过滤器。由于我一直尝试但在应用函数(fir1)时无法理解的原因,包从同一个包中应用另一个函数(fir2)并产生错误(这是好的,因为fir2函数未完成) - {{3} } - 。没有冲突的包。当应用该函数而不应用mapply时,它可以正常工作。我相信Mapply是适用的重叠功能。我还尝试使用expand.grid将所有变量组合成相同的结果。我的问题是,如果可能,如果可能,如何使用fir1与mapply进行下面的expresión。
library(signal)
N<-list(c(8448, 6034 ,3520, 960, 899, 704), c(6034, 3520, 2485, 1083, 960, 899, 704))
Rup<-list(c(0.03925781, 0.05496094, 0.09421875, 0.34546875, 0.36902344, 0.47109375),c(0.05496094, 0.09421875, 0.13347656, 0.30621094, 0.34546875, 0.36902344, 0.47109375))
Rdown<-list(c(0.03886719, 0.05441406, 0.09328125, 0.34203125, 0.36535156, 0.46640625),c(0.05441406, 0.09328125 ,0.13214844, 0.30316406, 0.34203125, 0.36535156, 0.46640625))
L<- seq(1:length(N))
LL <- function(x) seq(1:length(Rdown[[x]]))
LLL<-lapply(L,LL)
n <- function (x,y) round(3.3/(Rup[[x]][y]-Rdown[[x]][y]))
N <- mapply(n,L,LLL)
F<- function(x,y) fir1(N[[x]][y]-1, c(Rdown[[x]][y], Rup[[x]][y]), "pass", scale = TRUE)
FILTER <- mapply(F,L,LLL)
#Error en fir2(n, f, m, 512, 2, window) :
#frequency must be nondecreasing starting from 0 and ending at 1
#Además: Mensajes de aviso perdidos
#1: In if (n == 1) c = 1 else { :
#la condición tiene longitud > 1 y sólo el primer elemento será usado
#2: In 0:n :
#expresión numérica tiene 6 elementos: solo el primero es utilizado
#the same error occurs
LLLL<-expand.grid(L=L,LLL=LLL)
F<-mapply(function(x,y) fir1(N[[x]][y]-1, c(Rdown[[x]][y], Rup[[x]][y]), "pass", scale = TRUE),LLLL$L,LLLL$LLL)
#when applied directly it works fine.
fir1(N[[1]][1]-1, c(Rdown[[1]][1], Rup[[1]][1]), "pass", scale = TRUE)
欢迎任何帮助
答案 0 :(得分:1)
如果您想直接申请,请不要查看N[[1]][1]-1
和c(Rdown[[1]][1], Rup[[1]][1])
,但请注意:
v1 <- N[[L[[1]]]][LLL[[1]]]-1
> v1
[1] 8447 6033 3519 959 898 703
v2 <- c(Rdown[[L[[1]]]][LLL[[1]]], Rup[[L[[1]]]][LLL[[1]]])
> v2
[1] 0.03886719 0.05441406 0.09328125 0.34203125 0.36535156 0.46640625 0.03925781 0.05496094 0.09421875 0.34546875
[11] 0.36902344 0.47109375
如果查看函数fir1
的参数,可以阅读第一个参数n
:
n order of the filter (1 less than the length of the filter)
因此,它应该是一个数字,而不是v1
的矢量。
关于第二个参数w
:
w band edges, strictly increasing vector in the range [0, 1]...
但是你可以看到并检查v2,这个条件没有实现:
sum(!diff(v2)>=0)
[1] 1