我希望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
时。
答案 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"