【发布时间】:2019-12-30 04:28:46
【问题描述】:
已经很晚了,我一定犯了一个愚蠢的错误,但是为什么case_when的这种用法会产生错误?
x <- 1:5
dplyr:::case_when(
x == 1 ~ TRUE,
x != 1 ~ print(x))
#> [1] 1 2 3 4 5
#> Error: must be a logical vector, not an integer vector
【问题讨论】:
已经很晚了,我一定犯了一个愚蠢的错误,但是为什么case_when的这种用法会产生错误?
x <- 1:5
dplyr:::case_when(
x == 1 ~ TRUE,
x != 1 ~ print(x))
#> [1] 1 2 3 4 5
#> Error: must be a logical vector, not an integer vector
【问题讨论】:
错误是因为case_when 期望所有RHS 评估为相同的类型。
在这里,在 OP 的尝试中,TRUE 属于"logical" 类,x 属于"integer" 类型,因此,它返回错误。你可以试试,
x <- 1:5
dplyr::case_when(x == 1 ~ NA_integer_, x != 1 ~ x)
#[1] NA 2 3 4 5
或者其他方式:
dplyr::case_when(x != 1 ~ x, TRUE ~ NA_integer_)
【讨论】: