为什么以下内容会返回此错误?
> x <- as.bigz(5)
> y <- ifelse(1,x,0)
Error in ifelse(1, x, 0) :
incompatible types (from raw to logical) in subassignment type fix
我可以通过
来解决这个问题> x <- as.bigz(5)
> y <- as.bigz(ifelse(1,as.character(x),0))
这似乎与
这个事实有关> as.raw(5)
[1] 05
但
> as.raw(as.bigz(5))
[1] 01 00 00 00 01 00 00 00 01 00 00 00 05 00 00 00
这表明ifelse()正在做一个&#34; as.raw&#34;自动。 不过,如果
> y <- as.raw(as.bigz(5))
> y
[1] 01 00 00 00 01 00 00 00 01 00 00 00 05 00 00 00
是可能的,有什么区别?
答案 0 :(得分:2)
基本上这意味着当前没有定义ifelse.bigz
方法。 base::ifelse
无法理解bigz
个对象。
相反,使用if ... else
,因为if(bigz_x [relationship operator] bigz_y)
将起作用,因为关系运算符确实有bigz
个方法,因此返回if
可以使用的逻辑值。
Rgames> if(1) x else 0
Big Integer ('bigz') :
[1] 5