使用Try,Success和Failure进行错误处理时Scala-Declaring变量?

问题描述 投票:0回答:1

我的问题的背景如下:

我正在尝试将线性回归模型应用于某些数据,但如果数据未以所需格式显示,则模型将抛出异常错误。如果成功,那么我想将输出的残差保存为新变量,但如果失败则我想要将零数组定义为新变量。

我的问题是我无法根据函数的成功或失败声明此变量。

更具体地说,该模型被称为如下:

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()

我的尝试(使用TrySuccessFailure)是:

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

scala exception linear-regression
1个回答
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))
© www.soinside.com 2019 - 2024. All rights reserved.