Search code examples
rgmp

bigz variable type from package gmp with ifelse()


Why does the following return this error?

> 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

I can get around it by doing

> x <- as.bigz(5)
> y <- as.bigz(ifelse(1,as.character(x),0))

It seems to have something to do with the fact that

> as.raw(5)
[1] 05

but

> as.raw(as.bigz(5))
 [1] 01 00 00 00 01 00 00 00 01 00 00 00 05 00 00 00

Which suggests that ifelse() is doing a "as.raw" automatically. Still though, if

> y <- as.raw(as.bigz(5))
> y
 [1] 01 00 00 00 01 00 00 00 01 00 00 00 05 00 00 00

is possible, what is the difference?


Solution

  • Basically this means there is no ifelse.bigz method currently defined. base::ifelse doesn't understand bigz objects.

    Instead, use if ... else , since if(bigz_x [relationship operator] bigz_y) will work because the relationship operators do have bigz methods, thus returning a logical value that if can work with.

    Rgames> if(1) x else 0
    Big Integer ('bigz') :
    [1] 5