代码之家  ›  专栏  ›  技术社区  ›  Miao Cai

跳过R中for循环中的包“rstan”触发的错误

  •  0
  • Miao Cai  · 技术社区  · 4 年前

    如标题所述,我想跳过由 rstan tryCatch() try() ,例如 this stan 在一个循环中。下面是一个简单的例子:

    library(rstan)
    
    stancode = 'data {
      int<lower=0> J;          // number of schools
      real y[J];               // estimated treatment effects
      real<lower=0> sigma[J];  // s.e. of effect estimates
    }
    parameters {
      real mu;
      real<lower=0> tau;
      vector[J] eta;
    }
    transformed parameters {
      vector[J] theta;
      theta = mu + tau * eta;
    }
    model {
      target += normal_lpdf(eta | 0, 1);
      target += normal_lpdf(y | theta, sigma);
    }'
    
    schools_data <- list(
      J = 8,
      y = c(28,  8, -3,  7, -1,  1, 18, 12),
      sigma = c(-15, 10, 16, 11,  9, 11, 10, 18)#Intentionally created a negative value here
    )
    
    for (i in 1:3) {
      tryCatch({fit1 <- stan(model_code  = stancode, data = schools_data,
                   chains = 1, iter = 1000, refresh = 0)}, error=function(e){})
    }
    
    

    0 回复  |  直到 4 年前
        1
  •  1
  •   Community CDub    4 年前

    我的系统运行stan代码有问题,但是你试过了吗 purrr safely() possibly()

    x <- list(1, "d", 3)
    purrr::map(x, ~1/.x)
    # error in 1/.x: non numeric argument for binary operator
    purrr::map(x, safely(~1/.x))
    # [[1]]
    # [[1]]$result
    # [1] 1
    #  
    # [[1]]$error
    # NULL
    #  
    #  
    # [[2]]
    # [[2]]$result
    # NULL
    #  
    # [[2]]$error
    # <simpleError in 1/.x: non numeric argument for binary operator>
    #   
    #   
    # [[3]]
    # [[3]]$result
    # [1] 0.3333333
    #  
    # [[3]]$error
    # NULL