Scala 鞍架:什么';计算NaN值的最惯用方法是什么?

Scala 鞍架:什么';计算NaN值的最惯用方法是什么?,scala,saddle,Scala,Saddle,我构建了一个Scala框架,比如 import org.saddle._ import scala.util.Random val rowIx = Index(0 until 200) val colIx = Index(0 until 100) // create example having 15% of NaNs val nanPerc = 0.15 val nanLength = math.round(nanPerc*rowIx.length*colIx.length).toInt

我构建了一个Scala框架,比如

import org.saddle._
import scala.util.Random

val rowIx = Index(0 until 200)
val colIx = Index(0 until 100)

// create example having 15% of NaNs
val nanPerc = 0.15
val nanLength = math.round(nanPerc*rowIx.length*colIx.length).toInt
val nanInd = Random.shuffle(0 until rowIx.length*colIx.length).take(nanLength)
val rawMat = mat.rand(rowIx.length, colIx.length)
// contents gives a single array in row major
val rawMatContents = rawMat.contents
nanInd foreach { i => rawMatContents.update(i, Double.NaN) }

val df = Frame(rawMat, rowIx, colIx)

// now I'd like to test that the number of NaNs is correct but 
// most functions for this purpose in Frame e.g. countif exclude NaNs
df.???

最惯用的(Scala,Saddle)计算nan数的方法是什么?

我找到了一种非常简单直接的方法:

retDf.toMat.contents.filter(x => x.isNaN).length

Frame.countif

Vec.countif

我们可以使用相同的方法,但删除
测试
并反转NaN检查:

vec.filterFoldLeft(x => x.isNaN)(0)((a, b) => a + 1)
要在
帧上运行此操作

frame.reduce(_.filterFoldLeft(x => x.isNaN)(0)((a, b) => a + 1))

countif
被实现为
.filterFoldLeft(t=>sd.notMissing(t)和&test(t))(0)((a,b=>a+1)
,那么
.filterFoldLeft(sd.isMissing)(0)((a,b)=>a+1)
呢?嗨,谢谢你!你在展示一个向量,我在框架上操作,你能给出一个完整的答案而不是评论吗?
vec.filterFoldLeft(x => x.isNaN)(0)((a, b) => a + 1)
frame.reduce(_.filterFoldLeft(x => x.isNaN)(0)((a, b) => a + 1))