Quantcast

Dealing with NAs in C

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Dealing with NAs in C

chris90nz
Hi.
I am currently converting a lot of R code to C in order to make it more efficient. A lot of the data involves NAs. As the data is mainly integers > 0, I am just setting all NAs to 0 then sending it to the C code then resetting them to NAs again after the C program is done, to be compatible with the rest of the R code.

Is there a more efficient way to deal with NAs in C? I have used NAOK=true and sent them through using tobs=as.integer(tobs) for example, but when C looks at a NA it crashes.

I am looking for the most efficient way to deal with NAs when they need to be sent to a C function.

Any info here would be greatly appreciated!

Cheers,

Chris
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Dealing with NAs in C

Rui Barradas
Hello,

See section 5.10.3 of the R-exts.pdf.

There are macros ISNA(x) and ISNAN(x) (only for 'double') and constants NA_INTEGER, NA_REAL,
 NA_LOGICAL and NA_STRING.

> I am currently converting a lot of R code to C in order to make it more efficient. A lot of the data involves NAs. As
> the data is mainly integers > 0, I am just setting all NAs to 0 then sending it to the C code then resetting them to
> NAs again after the C program is done, to be compatible with the rest of the R code.

In a C function you could use

int x;

if(x == NA_INTEGER){
    // process an integer NA
}

Hope this helps,

Rui Barradas
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Dealing with NAs in C

chris90nz
Thanks Rui, that was exactly what I was looking for! Have successfully implemented it and got rid of yet another loop!

Cheers,

Chris
Loading...