Y a-t-il une version de Vectorize
qui utilise apply
plutôt que mapply
? Je voudrais vectoriser une fonction qui prend l'entrée vectorielle d'une manière qui me permet de passer un tableau à cette fonction et d'avoir un vecteur retourné.Une version de Vectorize() pour apply() plutôt que mapply()?
Bien sûr, je peux écrire mon propre emballage et cela fonctionne assez bien. Mais je me demandais si cette fonctionnalité est intégrée?
Je peux également utiliser Vectorize
, mais ensuite je dois convertir l'entrée de la matrice à un data.frame pour son travail. Par exemple:
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")
Puis
> my.fun(my.data, mean=THETA, S=LAMBDA, df=NU)
[1] 0.4404142 0.8130572 0.9667065 0.9961166 0.9996274 0.9999676
Ce qui est pas ce que je veux, mais
> my.data <- data.frame(my.data)
> my.fun(my.data, mean=THETA, S=LAMBDA, df=NU)
X1 X2
0.8130572 0.9996274
est ce que je veux.
BTW, pmt
provient du package mnormt et est un t cdf d'étudiant multivarié.
Voulez-vous dire que my.data' peut être un vecteur au lieu d'une matrice? Si oui, pouvez-vous en faire une matrice à une seule colonne? – Aaron
Si oui, tout ce dont vous avez besoin est 'apply (matrice (my.data, nrow = 3), 2, pmt, moyenne = THETA, S = LAMBDA, df = NU)'. Cela fonctionne à la fois sur les vecteurs et les matrices. – Aaron
@ La solution d'Aaron est meilleure que ma solution si sinon, au moins en termes de lisibilité. Je suppose que 'Vectorize' fait quelque chose de similaire dans' args <- lapply (as.list (match.call()) [- 1L], eval, parent.frame()) '. Pas que je le comprenne complètement. – kalu