R ifelse是否能正确处理空向量?

时间:2017-04-05 08:32:29

标签: r

我希望ifelse函数返回一个与其第二个或第三个参数相同类型的空向量,如文档所述:

  

值:

     

具有相同长度和属性的矢量(包括尺寸和尺寸)   '“class”')作为'test'和来自'yes'或'的值的数据值   '没有'。答案的模式将从逻辑强制转换为   首先容纳从“是”中取得的任何值,然后是任何值   取自'不'。

然而,在所有向量都为空的情况下,它返回logical(0),无论第二个和第三个参数的类型如何(R版本3.3.2)。

> ifelse(logical(), numeric(), numeric())
logical(0)

这是一个错误吗?如果是,我该如何报告,是否有机会修复?

我的用例是我自己的函数,用于替换具有任意值的NA

rep_nan<-function(x, value=0) ifelse(is.na(x), value, x)

但是,上述不一致会导致类型问题,例如,使用data.table时。

1 个答案:

答案 0 :(得分:3)

在您的示例中,ifelse()不返回logical(0),因为空数字正在被强制,但是因为只要test = logical(0),结果就是logical(0)

ifelse(logical(), numeric(), numeric())
# logical(0)

ifelse(0, numeric(), numeric())
# NA

ifelse(logical(), 0, 1)
# logical(0)

即使在返回缺失值时,逻辑上的强制也会发生,如文档所述:

class(ifelse(0, numeric(), numeric()))
# "numeric"