Faktor, Ebenen und Originalwerte
Frage
Ich möchte Variable schreiben f
in bestimmte Elemente (index
) einer vorhandenen Matrix m
. Angenommen f
ist ein Faktor:
f <- factor(c(3,3,0,3,0))
m <- matrix(NA, 10, 1)
index <- c(1,4,5,8,9)
Verwendung
m[index] <- f
gibt nicht das gewünschte Ergebnis, wie es die Etiketten ('1' und '2') in die Zulassung bringt m
aber nicht die ursprünglichen Werte ('0' und '3'). Deshalb habe ich benutzt
m[index] <- as.numeric(levels(f))[f]
Stattdessen funktioniert das gut.
Aber in meiner Situation, f
ist nicht immer ein Faktor, kann aber auch numerisch sein wie
f <- c(3.43, 4.29, 5.39, 7.01, 7.15)
Muss ich es so überprüfen wie
if ( is.factor(f) ) {
m[index] <- as.numeric(levels(f))[f]
} else {
m[index] <- f
}
oder gibt es eine "universelle" Art, die "wahren" Werte von zu setzen f
in Matrix m
, unabhängig von der Art von f
?
Danke im Voraus!
PS: Der Hintergrund ist das f
ist das Ergebnis von f <- predict(mymodel, Xnew)
wo model
ist ein SVM -Modell, das von trainiert wurde model <- svm(Xtrain, Ytrain)
und kann entweder ein Klassifikationsmodell sein (dann f
ist Faktor) oder ein Regressionsmodell (dann f
ist numerisch). Ich kenne die Art des Modells, aber die oben genannte, wenn Klausel für mich etwas uneingeschränkt erscheint.
Lösung
Warum nicht einfach das tun: zuerst konvertieren f
(was numerisch oder faktor sein könnte) zum Charakter, dann zu numerisch:
m[ index ] <- as.numeric( as.character(f) )
Andere Tipps
Die Art einer Matrix kann nicht "Faktor" sein: Sie müssen Faktoren separat behandeln. Am einfachsten kann es sein, sie in Saiten umzuwandeln.
if(is.factor(f)) {
m[index] <- as.character(f)
} else {
m[index] <- f
}