在函数上的映射会产生错误的另一个函数的应用

时间:2014-11-30 19:49:35

标签: r

我正在尝试创建一个应用于时间序列的过滤器。由于我一直尝试但在应用函数(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)

欢迎任何帮助

1 个答案:

答案 0 :(得分:1)

如果您想直接申请,请不要查看N[[1]][1]-1c(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