2010-12-08 1 views
2

Dans R, si j'ai une fonctionexécuter une fonction avec des valeurs multiples pour plus d'un des arguments qui ne sont pas les premiers

myfun<-function(ys, T, N, beta, gamma, sigma) {...} 

où bêta et gamma sont des scalaires. Si j'ai des valeurs fixes pour ys, T, N et sigma, mais un vecteur de valeurs de beta et un vecteur de valeurs pour gamma, est-il possible d'exécuter myfun chaque fois avec toutes les combinaisons possibles de valeurs pour beta et gamma?

Je considère lapply, mais je ne sais pas comment spécifier si les arguments avec beaucoup de valeurs à essayer ne sont pas le premier argument dans la fonction et ne sont pas simplement un argument.

Ou est-ce que je dois réécrire la fonction myfun pour que des applications lapply ou similaires puissent s'appliquer?

Ou je dois utiliser une boucle?

Merci pour votre intérêt!

Répondre

6

Utilisons comme exemple une fonction multi-arguments pratique comme dt(). Nous allons ("mult") - fournir 2 arguments dans "parallel" et ("const") - fournir des valeurs fixes pour les deux autres. Construisez une base de données avec expand.grid pour les listes multi-arguments, puis passez-la à mapply avec les noms appropriés et utilisez MoreArgs pour les arguments restants;

gamma <- 1:3 
beta <- 1:4 
gb.df <-expand.grid(gamma=gamma, beta=beta) 
mfun <- dt 
mapply ("mfun", x=gb.df$gamma, df=gb.df$beta, MoreArgs=list(ncp=1, log=FALSE)) 
    [1] 0.26355595 0.14379745 0.07896827 0.31785177 0.17910975 0.08636815 
    [7] 0.34118167 0.19555939 0.08572842 0.35411486 0.20513016 0.08355531 
2

Regardez les fonctions mapply et Vectorize avec expand.grid pour la partie toutes les combinaisons.

+0

+1 pour Vectorize, puissant thingy. –

Questions connexes