我在這裏有一個簡單的課堂問題,我很難過。 在這一個,我只應該使用ifelse
。前幾行工作正常,但如果我的x
是合乎邏輯的,則該函數應將任何TRUE
轉換爲單詞「白色」,並將任何FALSE
轉換爲單詞「黑色」。爲什麼R要求我的對象不符合邏輯?
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
}
但是,每當我跑q5 (c(TRUE, TRUE, FALSE, TRUE, TRUE))
例如,我得到這個錯誤:
Error in (is_true <- which(x == "TRUE")) & (is_false <- which(x == "FALSE")) & :
operations are possible only for numeric, logical or complex types
這個載體是絕對合理的。在插入單詞之前,我嘗試將它轉換成字符,並嘗試使用新元素,但它們都是一樣的。 如果說我的元素其實是合乎邏輯的,那麼我很想知道這個信息的含義。 謝謝!
'(X [is_true] < - 「白」)'將返回 「白色」 和'( 1&「WHITE」)'會拋出錯誤,我現在放棄ifelse,這已經很難讀取和調試 – rawr
不幸的是,這應該使用'ifelse'來完成。當然,我可以輕鬆地做到這一點,但沒有它,但... –
'q5 < - Vectorize(函數(x)ifelse(is.numeric(x),ifelse(x %% 3 == 0,x * 2,x/3),ifelse(is.character(x),stop('chr'),ifelse(is.logical(x),ifelse(x,'WHITE','BLACK'),NA)))); q5(c(TRUE,TRUE,FALSE,TRUE,TRUE))' – rawr