Fehler… fehlender Wert, wo TRUE / FALSE benötigt wird
Ich habe versucht, einen Code zum Sortieren eines Vektors in R zu schreiben, erhalte jedoch immer wieder die folgende Fehlermeldung: Error in if (data[j] < data[k]) { : missing value where TRUE/FALSE needed
Dies ist meine bisherige Sortierfunktion:
sortscore <- function(data){
new <- 0
x <- data
for (i in 1:length(data)){
new[i] <- minscore(x)
x <- x[x!=minscore(x)]
x
}
new
}
Dies ist die Minscore-Funktion:
minscore <- function(data){
j <- 1;k <- j+1; min <- 0
repeat {
if(data[j]<data[k]){
min <- data[j]
k <- k+1
}
else{
min <- data[k]
j <- k
k <- k+1
}
if(k==length(data)+1) break
}
return(min)
}
Ich kann die length()Funktion nur für eine eingebaute Funktion verwenden, daher ist eine Sortierfunktion erforderlich. Bitte helfen Sie mir zu verstehen.
Antworten
Das Problem ist, dass Ihre sortscoreFunktion xbei jeder Iteration um eins kleiner wird, was bedeutet, dass sie bei der letzten Iteration nur eine einzige Zahl enthält. Sie rufen die minscoreFunktion daher unter einer einzigen Nummer auf.
Der Test im if(data[j]<data[k])Inneren minscorebenötigt mindestens zwei Zahlen, um zu funktionieren, sonst wird ein Fehler ausgegeben, da kimmer 1 höher als ist j. data[2]existiert nicht, wenn dataLänge 1 ist.
Die einfache Lösung besteht darin, dass datadie minscoreFunktion die Länge 1 unverändert zurückgibt.
Wenn wir also Ihre Funktion ändern in:
minscore <- function(data){
if(length(data) == 1) return(data)
j <- 1;k <- j+1; min <- 0
repeat {
if(data[j]<data[k]){
min <- data[j]
k <- k+1
}
else{
min <- data[k]
j <- k
k <- k+1
}
if(k==length(data)+1) break
}
return(min)
}
Dann sollten wir eine funktionierende Sortierfunktion bekommen:
x <- sample(20)
x
#> [1] 8 14 11 19 20 2 3 10 1 15 4 17 6 16 7 5 13 12 18 9
sortscore(x)
#> [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Nett.