x ist ein Vektor von ganzen Zahlen zwischen 1 und 100 im BereichWie vermeidet man If-Ausdrücke mit Hilfe von Vektorindizes?
I eine Funktion geschaffen, die eine Zahl ist, in der Kategorie bestimmt:
x∈[1,20]: small
x∈[21,50]: med
x∈[51, 100]:large
Hier kann die Funktion:
x <- c(1:99)
vector.fun<-function(x){
x[x >= 1 & x <=20] <-"small"
x[x >= 21 & x <=50] <-"med"
x[x >=51 & x <=99] <-"large"
return(x)
}
vector.fun(89)
jedoch als Sie können sehen, in der Funktion mein Vektor ist 1:99 anstelle von 1: 100, aus irgendeinem Grund, wenn ich es zu ändern:
x <- c(1:100)
vector.fun<-function(x){
x[x >= 1 & x <=20] <-"small"
x[x >= 21 & x <=50] <-"med"
x[x >=51 & x <=100] <-"large"
return(x)
}
vector.fun(100)
es erkennt keine Zahl aus der letzten Zeile: x[x >=51 & x <=100] <-"large"
und wenn es tut, gibt es "med" statt "groß", wie es sein sollte.
was mache ich falsch? Welche Änderungen sollte ich in meiner Funktion vornehmen, damit 100 im Parameter enthalten ist und "groß" zurückgibt?
'Nötigung 'ist ein wahrscheinlicher Täter – Khashaa
Ihr Funktionsparameter ist der gleiche wie Ihr ursprünglicher Vektor. Der Vektor außerhalb der Funktion wird niemals verwendet. – Psidom
Das erste Mal, wenn Sie Indizes in Ihrem 'x' durch" small "ersetzen, wird' x' zu "character" gezwungen und Sie enden mit Vergleichen wie 'c (" 1 "," 50 "," 60 ")> =" 51 "' und 'c (" 1 "," 50 "," 60 ") <=" 100 "', die sich von ihren "numerischen" Entsprechungen unterscheiden können. Stattdessen, für solche Probleme, verwenden Sie Schnitt (x, c (0, 20, 50, 100), Beschriftungen = c ("klein", "med", "groß") ' –