2017-04-21 2 views
0

J'ai plus d'une fonction et au lieu de répéter la fonction optim à chacune. J'ai essayé beaucoup d'autres fonctions manuelles pour le faire. Cependant, toutes mes propres fonctions ne fonctionnent pas. Ensuite, j'ai essayé d'utiliser sapply fonctions mais la même chose, ce n'est pas de travail.appliquer la fonction optim à plusieurs fonctions dans r en utilisant la fonction sapply

Par exemple,

my_fun <- function(x,start=c(0,1),mu=c(0.5,2),sd=c(0.3,0.2)){ 

    ll_1 <- function(mu,sd){ 
    -sum(log(dnorm(x,mu[[1]],sd[[1]])) 
    } 
    ll_2 <- function(mu,sd){ 
    -sum(log(dnorm(x,mu[[2]],sd[[2]])) 
    } 
    ## apply ll to different dnorm functions 
    } 
} 
    optimm_1 <- optim(start,fn=ll_1) 
    optimm_2 <- optim(start,fn=ll_2) 

## Je veux la fonction optim appliquer à chaque fonction et me donner le résultat de chacun. J'ai essayé de faire fonctionner la boucle for. Donc, au lieu de répéter ma fonction encore et encore. En outre, je me suis fatigué pour adapter optim à toutes ces fonctions à la fois sans répéter pour chaque fonction.

+0

Ce que vous optimisez n'est pas clair car 'll' n'est manifestement pas une fonction. – Frank

+0

Oui, vous avez raison, c'était une erreur. Je le mets à jour. –

+0

Ok, bien votre 'start' a une longueur de 2 tandis que le' 'premier argument' '(le seul argument' optim' regarde), a apparemment une longueur de 1. vous pouvez faire 'f <- function (par) -sum (log (dnorm (x, par [1], par [2]))) 'à la place, par exemple. – Frank

Répondre

0

Je suis d'accord avec le commentaire de @Frank. Vous devriez réécrire votre fonction d'une manière qui soit acceptée par la fonction optim. En outre, cette question (ou peut-être similaire à ce que vous essayez de faire) a été répondu sur ce site. Veuillez voir ceci:

[[1]: apply an optimal function to a function using a for loop in r. J'espère que ceci vous aidera.

+0

Il est bon de rechercher sur le site avant d'ajouter votre question, aussi je vous recommande d'ajouter vos essais (au moins l'un d'entre eux). Bonne chance. – Alice