用于apply()而不是mapply()的Vectorize()版本?

时间:2011-06-05 17:13:29

标签: r vectorization

是否有使用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。

1 个答案:

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