# define function that returns the SSE calcSSE <- function(x){ loessMod <- try(loess(uempmed ~ index, data=economics, span=x), silent=T) res <- try(loessMod$residuals, silent=T) if(class(res)!="try-error"){ if((sum(res, na.rm=T) > 0)){ sse <- sum(res^2) } }else{ sse <- 99999 } return(sse) } # Run optim to find span that gives min SSE, starting at 0.5 optim(par=c(0.5), calcSSE, method="SANN") #> $par #> [1] 0.05433545 #> #> $value #> [1] 3.85753e-28 #> #> $counts #> function gradient #> 10000 NA #> #> $convergence #> [1] 0 #> #> $message #> NULL