在下面的示例中,收到错误消息。 (数据类型不匹配)使用 fielse 时,而 ifelse 工作得很好。
DT = data.table(
ID = c("b","b", "b", "a", "a", "c"),
a = 1:6,
b = c(7, 7, 9, 9, 11, 11)
)
DT[, d := fifelse(b - a > 5, b -a, NA)]
fifelse(b - a > 5, b - a, NA) 中的错误: 'yes' 是 double 类型,但 'no' 是逻辑类型。请确保两个参数具有相同的类型。
但是,
DT[, d := ifelse(b - a > 5, b -a, NA)]
DT
效果很好 ID a b d 1:b 1 7 6 2:b 2 7 不适用 3:b 3 9 6 4:4 9 NA 5: 5 11 6 6:c 6 11 NA
最近广泛使用 fifelse,但是,这种行为绝对是出乎意料的。
由于使用
fifelse
,我们在每列具有固定数据类型的 data.table
环境中操作,因此 na
参数 的输入必须与 yes
和
no
具有相同的类型争论,即使它是
NA
。有特殊的 NA
类型来定义这一点,例如 NA_character_
、NA_real_
、NA_integer_
等等。
在您的情况下,
yes
和no
参数的类型为integer
,这意味着您的NA
参数的正确输入是NA_integer_
。这样,fielse 子句的每个输出都具有相同的类型,并且可以用作 data.table
中的列。