为什么 fielse() 会抛出错误,而 ifelse() 不会?

问题描述 投票:0回答:1

在下面的示例中,收到错误消息。 (数据类型不匹配)使用 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,但是,这种行为绝对是出乎意料的。

r data.table
1个回答
0
投票

由于使用

fifelse
,我们在每列具有固定数据类型的
data.table
环境中操作,因此
na
参数 的输入必须与 yes
no
 具有相同的类型
争论,即使它是
NA
。有特殊的
NA
类型来定义这一点,例如
NA_character_
NA_real_
NA_integer_
等等。

在您的情况下,

yes
no
参数的类型为
integer
,这意味着您的
NA
参数的正确输入是
NA_integer_
。这样,fielse 子句的每个输出都具有相同的类型,并且可以用作
data.table
中的列。

© www.soinside.com 2019 - 2024. All rights reserved.