Ich habe hier eine einfache Klassenfrage, und ich bin ratlos. In diesem, wo ich nur ifelse
verwenden soll. Die ersten paar Zeilen funktionieren gut, aber wenn die meine x
ist logisch, sollte die Funktion alle TRUE
in das Wort "White", und alle FALSE
in das Wort "Black".Warum behauptet R mein Objekt ist nicht logisch?
q5 <- function (x) {
ifelse (is.numeric (x),
(div_three <- which (x %% 3 == 0)) &
(not_div_three <- which (x %% 3 != 0)) &
(x [div_three] <- (x [div_three]/3)) &
(x [not_div_three] <- (x [not_div_three] * 2)),
ifelse (is.character (x),
stop ("Input is a character."),
ifelse (is.logical (x),
(is_true <- which (x == "TRUE")) &
(is_false <- which (x == "FALSE")) &
(x [is_true] <- "WHITE") &
(x [is_false] <- "FALSE"))))
x
}
Jedes Mal, wenn ich q5 (c(TRUE, TRUE, FALSE, TRUE, TRUE))
zum Beispiel laufen, bekomme ich diesen Fehler:
Error in (is_true <- which(x == "TRUE")) & (is_false <- which(x == "FALSE")) & :
operations are possible only for numeric, logical or complex types
Dieser Vektor definitiv logisch ist. Ich habe versucht, es in Zeichen zu verwandeln, bevor ich die Wörter eingefügt habe, und habe auch versucht, ein neues Element zu verwenden, aber es ist alles gleich. Ich liebe etwas Hilfe herausfinden, was diese Nachricht bedeutet, da mein Element in der Tat logisch ist. Vielen Dank!
'zu sehen (x [is_true] <- "WHITE")' zurückkehren wird "weiß" und '(1 & "WHITE") 'wird diesen Fehler werfen, ich würde ifelse jetzt aufgeben, das ist schon schwer zu lesen und zu debuggen – rawr
Leider soll dies mit' ifelse' gemacht werden. Natürlich könnte ich es ohne es leicht machen, aber ... –
'q5 <- Vectorize (Funktion (x) ifelse (is.numeric (x), ifelse (x %% 3 == 0, x * 2, x/3), ifelse (is.character (x), stop ('chr'), ifelse (is.logisch (x), ifelse (x, 'WEISS', 'SCHWARZ'), NA)))); q5 (c (WAHR, WAHR, FALSCH, WAHR, WAHR)) ' – rawr