我在简单函数上得到一个对象,我可以用它来重建或绘制同一个函数,当应用mapply时,我无法得到一个对象,但是函数的组件结果。
library(wmtsa)
x<-c(1,2,3,4,5,6,7,8,9,9,8,7,8,7,6,5,4,3,2,1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1)
# Now normal-results in an object I could use to plot or reconstruct.
D <- wavDWT(x, n.level= 5, wavelet= "s2")
D
# Now different results than above as per using mapply on the same function.
wavelet <- wavelet<- c("d2","s2","d4","s4","d6")
nlevel <- seq(1: as.integer (floor (logb ((length(x)),base=2))))
ex2 <- expand.grid(n.levels = nlevel, wavelet=wavelet, stringsAsFactors = FALSE)
D <- mapply(function(y,z) wavDWT(x, n.level= y, wavelet= z), ex2$n.level, ex2$wavelet)
# Desired Output result of using regular function is "wavTransform" object
D
Discrete Wavelet Transform of x
-------------------------------
Wavelet : s2
Length of series : 36
Number of levels : 5
Boundary correction rule : periodic
Filtering technique : convolution
Zero phase shifted : FALSE
Crystals : d1 d2 d3 d4 d5 s5 extra
如何在DWT结果中使用mapply获得与简单函数结果D相同的对象类型。
答案 0 :(得分:1)
问题在于,默认情况下,mapply()
尝试将结果简化为矩阵(如果可能)。在这种情况下,这是不可取的。您可以使用SIMPLIFY=FALSE
参数,也可以只使用Map()
。例如
DWT <- Map(function(y,z) wavDWT(x, n.level= y, wavelet= z), ex2$n.levels, ex2$wavelet)
这将返回一个列表。列表中的每个项目都与原始D
相同。您可以使用
class(D) == class(DWT[[1]])