Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 重新运行,直到没有发生NA_R_Optimization_Na - Fatal编程技术网

R 重新运行,直到没有发生NA

R 重新运行,直到没有发生NA,r,optimization,na,R,Optimization,Na,我有一个代码,有时有效,有时无效(给出Na),我想找到一种方法来运行有条件的代码(如果代码无效,重新运行它,直到没有Na出现) 这只是一个例子,因此我可以使用其他分布/数据/参数重新生成工作 mu=3;sigma=0.3;phi=0.33;n=10 e=rnorm(n, mean = mu, sd = sigma ) y=e[1] for (s in 2:n){ ynew=phi*y[s-1]+e[s] y=c(y,ynew) } t=2:length(y) ll=function(pa

我有一个代码,有时有效,有时无效(给出Na),我想找到一种方法来运行有条件的代码(如果代码无效,重新运行它,直到没有Na出现)

这只是一个例子,因此我可以使用其他分布/数据/参数重新生成工作

 mu=3;sigma=0.3;phi=0.33;n=10
 e=rnorm(n, mean = mu, sd = sigma )

 y=e[1]
for (s in 2:n){
ynew=phi*y[s-1]+e[s]
y=c(y,ynew)
}
t=2:length(y)
ll=function(par1){
sum(-dnorm(y[t], mean = par1[1]+par1[2]*(y[t-1]), sd = par1[3],log = T)) 
     }
parstar=c(mean(y),0.1,var(y))

est_par=optim(parstar,ll,method = "Nelder-Mead")
pr1a=est_par$par
Ui=pnorm(sort(y), mean = pr1a[1],sd=pr1a[3])
## I want to have a condition for Ui so that if Ui is not Na return Ui else re-run e until Ui is not NA

也许,您可以编写一个递归函数,在最后一步检查是否存在任何
NA
值,然后再次运行相同的函数,直到获得非NA值

calculate_fun <- function(mu, sigma, phi, n) {

   e=rnorm(n, mean = mu, sd = sigma )
   y=e[1]
   for (s in 2:n){
     ynew=phi*y[s-1]+e[s]
     y=c(y,ynew)
   }
   t=2:length(y)
   ll=function(par1){
     sum(-dnorm(y[t], mean = par1[1]+par1[2]*(y[t-1]), sd = par1[3],log = T)) 
   }
   parstar=c(mean(y),0.1,var(y))
   est_par=optim(parstar,ll,method = "Nelder-Mead")
   pr1a=est_par$par
   Ui=pnorm(sort(y), mean = pr1a[1],sd=pr1a[3])
   #added a check here
   if(any(is.na(Ui))) calculate_fun(mu, sigma, phi, n) else Ui
}

mu=3;sigma=0.3;phi=0.33;n=10
calculate_fun(mu, sigma, phi, n)

calculate\u fun我运行了您的代码10000次,并且
Ui
从未
NA
也未包含
NA
,尽管警告是从
dnorm
生成的。请澄清,正常情况下,我没有得到Na,但如果我改变分布,我得到Na。我的原始代码有复杂的分布和很长的ll函数代码,这就是为什么我给出了正态分布的例子。对不起,我应该在我的问题
中提到重复{do_something();x