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.

War es hilfreich?

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
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top