2017-12-25 4 views
0

내 문제의 컨텍스트는 다음과 같습니다.스칼라 - 오류 처리를 위해 Try, Success 및 Failure를 사용할 때 변수 선언?

데이터에 선형 회귀 모델을 적용하려고하지만 데이터가 필수 형식으로 표시되지 않으면 모델에서 예외 오류가 발생합니다. 성공하면 출력의 잔차를 새 변수로 저장하려고하지만 실패하면 새 변수로 0의 배열을 정의하려고합니다.

제 문제는 함수의 성공 여부에 따라이 변수를 선언 할 수 없다는 것입니다. 구체적으로는, 모델로 불린다

다음 다음

import org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression 
import org.apache.commons.math3.stat.regression.AbstractMultipleLinearRegression 
import scala.util.{Try,Success,Failure} 

val model=new OLSMultipleLinearRegression() 
val goodData=Array(Array(.1),Array(.2)) 
val badData=Array(Array(.1,.1),Array(.2,.2)) 
val y=Array(.5,.6) 

예외 오류 MathIllegalArgumentException

model.newSampleData(y,badData) 

를 얻을 수 있지만,이 정상 동작을 수득

model.newSampleData(y,goodData) 

경우가 예외 오류가 발생하면 변수를 선언하려고합니다. val params=Array.fill(2)(0.0)하지만 예외 오류가 없다면 변수 val params=model.estimateResiduals()을 선언하고 싶습니다. (Try, SuccessFailure 사용)

내 시도는 다음과 같습니다

Try{model.newSampleData(y,badData)} match { 
case Success(_)=>val params=model.estimateResiduals() 
case Failure(_)=>val params=Array.fill(2)(0.0) 
} 

을하지만 params를 입력 할 때 나는 오류 error: not found: value params를 얻을.

선형 회귀 방법의 성공 또는 실패를 변수로하여 params을 어떻게 선언 할 수 있습니까?

답변

2

선언 한 변수는 블록에 로컬입니다. 사용

val params = Try{model.newSampleData(y,badData)} match { 
    case Success(_) => model.estimateResiduals() 
    case Failure(_) => Array.fill(2)(0.0) 
} 

하거나

val params = Try(model.newSampleData(y,badData)) 
    .map(_ => model.estimateResiduals()) 
    .getOrElse(Array.fill(2)(0.0)) 
+0

니스, 감사합니다! – user322778

관련 문제