如何将mapply用于类似的函数,从而获得相同的对象类型

时间:2015-08-02 03:31:59

标签: r

我在简单函数上得到一个对象,我可以用它来重建或绘制同一个函数,当应用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相同的对象类型。

1 个答案:

答案 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]])