包含gmp和ifelse()的bigz变量类型

时间:2014-03-24 14:29:02

标签: r gmp

为什么以下内容会返回此错误?

> 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

是可能的,有什么区别?

1 个答案:

答案 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