2017-04-21 1 views
0

Ich habe mehr als eine Funktion und statt die optim Funktion zu jedem einzelnen zu wiederholen. Ich habe viele andere manuelle Funktionen ausprobiert. Alle meine eigenen Funktionen funktionieren jedoch nicht. Dann habe ich versucht, Funktionen zu verwenden, aber das gleiche, es ist nicht funktionieren.Wenden Sie Optimierungsfunktion auf mehrere Funktionen in r mit Sapply-Funktion

Zum Beispiel

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) 

## Ich möchte, dass die Optim-Funktion für jede Funktion anzuwenden und geben mir das Ergebnis eines jeden.

x <- rnorm(10,0.5,3) ##to get the data 

Ich habe versucht, ll Funktion innerhalb der for Schleife zu machen. Also, anstatt meine Funktion immer wieder zu wiederholen. Außerdem habe ich es satt, alle diese Funktionen gleichzeitig zu optimieren, ohne sie für jede Funktion zu wiederholen.

+0

Es ist nicht klar, was Sie optimieren, weil 'll' auffällig keine Funktion ist. – Frank

+0

Ja, du hast Recht, es war ein Fehler. Ich aktualisiere es. –

+0

Ok, nun hat dein 'start' eine Länge von 2 während' ll's erstes Argument (das einzige Argument 'optim') betrachtet wird, hat scheinbar eine Länge von 1. du kannst' f <- function (par) -sum (zum Beispiel log (dnorm (x, par [1], par [2]))) statt. – Frank

Antwort

0

Ich stimme dem Kommentar von @Frank zu. Sie sollten Ihre Funktion so umschreiben, dass sie von der optim Funktion akzeptiert wird. Auch diese Frage (oder vielleicht ähnlich zu dem, was Sie versuchen) wurde auf dieser Website beantwortet. Siehe hierzu:

[[1]: apply an optimal function to a function using a for loop in r. Hoffe das wird dir helfen.

+0

Es ist gut, die Website zu durchsuchen, bevor Sie Ihre Frage hinzufügen, auch ich empfahl Ihnen, Ihre Versuche (mindestens eine von ihnen) hinzuzufügen. Viel Glück. – Alice

Verwandte Themen