Les cadres sont immuables des conteneurs, il est donc sans doute préférable de construire votre cadre avec les valeurs entièrement initialisés que commencer par un cadre partiellement initialisés.
import org.saddle._
object Test {
def main(args: Array[String]): Unit = {
val names: Vec[Any] = Vec("andy", "bruce", "cheryl", "dino", "edgar", "frank", "gollum", "harvey")
val ages: Vec[Any] = Vec(4, 89, 7, 21, 14, 18, 23004, 65)
def status(age: Any): Any = if (age.asInstanceOf[Int] >= 18) "eligible" else "noteligible"
def mapper(indexAge: (Int, Any)): (Int, _) = indexAge match {
case (index, age) => (index, status(age))
}
val nameAge: Frame[Int, String, Any] = Frame("name" -> names, "age" -> ages)
val ageCol: Series[Int, Any] = nameAge.colAt(1)
val eligible: Series[Int, Any] = ageCol.map(mapper)
println("" + nameAge)
println("" + eligible)
val nameAgeStatus: Frame[Int, String, _] = nameAge.joinSPreserveColIx(eligible, how=index.LeftJoin, "status")
println("" + nameAgeStatus)
}
}
Si vous avez vraiment besoin de commencer à partir d'un cadre partiellement initialisées, vous pouvez toujours déposer la colonne uninitialised et l'ajouter à nouveau avec les valeurs calculées correctement.
Bien que je préférerais taper fortement les colonnes de données, je pense qu'un cadre contient uniquement des données d'un type, et le type commun pour "Int" et "String" est "Any". Cela affecte également les signatures de type des méthodes, bien que vous souhaitiez les intégrer sans les informations de type.
J'ai trouvé que regarder le scaladoc m'a beaucoup aidé.
C'est la sortie de l'appel println final:..
[8 x 3]
name age status
------ ----- -----------
0 -> andy 4 noteligible
1 -> bruce 89 eligible
2 -> cheryl 7 noteligible
3 -> dino 21 eligible
4 -> edgar 14 noteligible
5 -> frank 18 eligible
6 -> gollum 23004 eligible
7 -> harvey 65 eligible
Merci, NorthCat –
Pour tester le droit de vote/boisson/fumée qui devrait probablement être x> = 18 – richj
richj, merci pour votre répondre. Je dois changer la base des valeurs de colonne sur la colonne d'âge. –