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 -- View this message in context: http://r.789695.n4.nabble.com/Dealing-with-NAs-in-C-tp4421377p4421377.html Sent from the R help mailing list archive at Nabble.com.
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 -- View this message in context: http://r.789695.n4.nabble.com/Dealing-with-NAs-in-C-tp4421377p4421439.html Sent from the R help mailing list archive at Nabble.com.
Thanks Rui, that was exactly what I was looking for! Have successfully implemented it and got rid of yet another loop! Cheers, Chris -- View this message in context: http://r.789695.n4.nabble.com/Dealing-with-NAs-in-C-tp4421377p4421532.html Sent from the R help mailing list archive at Nabble.com.