我写了一个最大似然函数的简单函数,并希望此函数根据其参数的不同值使用for
循环给出不同的结果。这就是我的函数包括基于for
循环的表达式。我的功能运行良好,结果保存在列表中。然后,由于我有两个不同的结果,我想基于我的函数的每个部分将optim
函数应用于我的函数。例如,在r中使用for循环应用最佳函数
ff <- function(x,mu=c(2,0.5),sd=c(0.2,0.3)){
out <- vector("list",2)
for (i in 1:2){
out[[i]] <- -sum(log(dnorm(x,mu[[i]],sd[[i]]))) ## here I have two different part of my funcitons wrap as one using for loop.
}
return(out)
}
set.seed(123)
x <- rnorm(10,2,0.5)
x
然后我的函数的结果是:
> ff(x)
[[1]]
[1] 25.33975
[[2]]
[1] 101.4637
然后,因为我的功能有两个不同的部分包装成一个使用for
循环,我想在Optim功能适用于这个函数基于它的每个部分。我尝试了很多自己的方法,但他们没有工作。这里是我的尝试之一:
op <- vector("list",2)
for(i in 1:2){
op <- optim(c(0.5,0.5),fn=ff[[i]],i=i)
}
也就是说,我希望optim
功能在我的论点i=1
的第一价值评估我的功能,然后评估第二个i=2
功能。
所以我funcitons没有包装如下:
ff_1 <- function(x,mu=c(2,0.5),sd=c(0.2,0.3)){
-sum(log(dnorm(x,mu[[1]],sd[[1]])))
return(out)
}
ff_2 <- function(x,mu=c(2,0.5),sd=c(0.2,0.3)){
-sum(log(dnorm(x,mu[[2]],sd[[2]])))
return(out)
}
,然后我需要使用两个不同的optim
功能,每个功能。
我搜索了很多网站和R帮助网站,但我无法找到解决这个问题的方法。
请帮忙吗?
我想我的问题是如何使' optim'函数自动移动我的功能'i'。 – Alice
请问您可以使用'set.seed()'让您的输出可以被复制? – mtoto
感谢@mtoto您的评论,我做到了。 – Alice