我的问题的背景如下:
我正在尝试将线性回归模型应用于某些数据,但如果数据未以所需格式显示,则模型将抛出异常错误。如果成功,那么我想将输出的残差保存为新变量,但如果失败则我想要将零数组定义为新变量。
我的问题是我无法根据函数的成功或失败声明此变量。
更具体地说,该模型的调用如下:
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
,Success
和Failure
)是:
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
?
答案 0 :(得分: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))