是否有使用Vectorize
而不是apply
的{{1}}版本?
我想矢量化一个以允许我的方式进行矢量输入的函数
将数组传递给该函数并返回一个向量。
当然,我可以编写自己的包装器并且运行良好。但我想知道这个功能是否内置?
我也可以使用mapply
,但是我必须将矩阵输入转换为data.frame才能正常工作。例如:
Vectorize
然后
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
是我想要的。
BTW,> my.data <- data.frame(my.data)
> my.fun(my.data, mean=THETA, S=LAMBDA, df=NU)
X1 X2
0.8130572 0.9996274
来自mnormt包,是一个多变量学生的cd cd。
答案 0 :(得分:1)
您似乎想要定义一个函数my.fun
,并将其传递到矩阵my.data
,而my.fun
只会“知道”它需要将函数应用于每列my.data
。这就是apply()
函数的意图;你不需要Vectorize
电话。那么为什么不这样做呢:
my.data <- array(1:6, c(3,2))
> apply(my.data, 2, pmt, mean=THETA, S=LAMBDA, df=NU)
[1] 0.8130572 0.9996274