1
是否有Vectorize
版本使用apply
而不是mapply
? 我想矢量化一个函数,该函数以一种允许我将数组传递给该函数并返回矢量的方式接受矢量输入。适用于()而不是mapply()的Vectorize()的版本?
当然,我可以写我自己的包装,这工作得很好。但我想知道这个功能是否内置?
我也可以使用Vectorize
,但后来我必须将矩阵输入转换为data.frame才能工作。例如:
LAMBDA <- cbind(c(1, .5, .5), c(.5, 1, .5), c(.5, .5, 1))
THETA <- c(0,0,1)
NU <- 21
my.data <- array(1:6, c(3,2))
my.fun <- Vectorize(pmt, vectorize.args="x")
然后
> my.fun(my.data, mean=THETA, S=LAMBDA, df=NU)
[1] 0.4404142 0.8130572 0.9667065 0.9961166 0.9996274 0.9999676
这不是我想要的,但
> my.data <- data.frame(my.data)
> my.fun(my.data, mean=THETA, S=LAMBDA, df=NU)
X1 X2
0.8130572 0.9996274
就是我想要的。
顺便说一句,pmt
是来自mnormt包,是一个多元学生的t cdf。
你的意思'my.data'可以是一个向量而不是矩阵吗?如果是这样,你可以把它做成一个列矩阵吗? – Aaron 2011-06-06 14:29:47
如果是这样,所有你需要的是'apply(matrix(my.data,nrow = 3),2,pmt,mean = THETA,S = LAMBDA,df = NU)'。这适用于矢量和矩阵。 – Aaron 2011-06-06 14:37:23
@亚伦的解决方案比我的解决方案要好,至少在可读性方面。我猜'Vectorize'确实在'args < - lapply(as.list(match.call())[ - 1L],eval,parent.frame())'中做了类似的事情。并不是我完全理解它。 – kalu 2011-06-07 12:42:28