使用lapply最大化沿网格的功能

Ste*_*sen 2 r

我重写了这个问题,使其具有可重复性.假设我要发挥最大的功用exp(alpha+eta+gamma)alpha,eta,gamma沿着自己选择的网格.我使用for循环完成了这个,但我想利用apply-functions来加速程序.这就是我所做的(eta和gamma在这里被固定).

eta=0.11
gamma=0.06
alpha=0.5    
alpha_vals=seq(0.1,1,by=0.1)
eta_vals=eta
gamma_vals=gamma


ml_temp=-Inf

lapply(alpha_vals,function(alpha_v){
  lapply(eta_vals,function(eta_v){
    lapply(gamma_vals,function(gamma_v){
      temp=exp(alpha_v+eta_v+gamma_v)
      if (temp >= ml_temp) {
        ml_temp=temp
        mle_matrix=c(alpha_v,eta_v,gamma_v)
      }  
    })  
  })    
})
Run Code Online (Sandbox Code Playgroud)

输出mle_matrix我得到0 0 0,所以有些东西显然不起作用.任何帮助表示赞赏.

Thi*_*rry 5

最简单的方法是使用expand.grid()和apply()

toTest <- expand.grid(
    alpha = seq(0.1, 1, by = 0.1), 
    eta = seq(0.1, 1, by = 0.1), 
    gamma = seq(0.1, 1, by = 0.1))
ml <- apply(toTest, 1, function(x){
  exp(sum(x))
})
toTest[which.max(ml), ]
Run Code Online (Sandbox Code Playgroud)