我在这里有一个简单的课堂问题,我很难过。 在这一个,我只应该使用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