Pergunta

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?

Foi útil?

Solução

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top