From simon.urbanek at r-project.org  Thu Jun 18 16:24:50 2009
From: simon.urbanek at r-project.org (Simon Urbanek)
Date: Thu, 18 Jun 2009 10:24:50 -0400
Subject: [Rd] Argument as.integer(NA) to a function C
In-Reply-To: <4A3A47C4.7060509@u-paris10.fr>
References: <4A3A47C4.7060509@u-paris10.fr>
Message-ID: <C9B014DA-0666-4EB5-916F-CF3087C8BFA0@r-project.org>


On Jun 18, 2009, at 9:57 , Christophe Genolini wrote:

> Hi the list,
> I am writing a R function that call a C function. The C function  
> needs integers but I do not manage to give a NA integer as argument :
>
> --- C code ---
> void essai(int *t){
>   Rprintf("\nT0=%i T1=%i T2=%i T3=%i",t[0],t[1],t[2],t[3]);
> }
>
> --- R ---
> boub <- c(1,2,3,4)
> .C("pour",as.integer(boub),NAOK=TRUE)
>
> # T0=1 T1=2 T2=3 T3=4[[1]]
> # [1] 1 2 3 4
>
> boub <- c(1,2,NA,4)
> .C("essai",as.integer(boub),NAOK=TRUE)
>
> # T0=1 T1=2 T2=-2147483648 T3=4[[1]]
> # [1]  1  2 NA  4
> --- ---
>
> In the second example, T2=-2147483648 and not NA.
>
> I check the "writing R extension", there is a part that explain that  
> the test of NA is not the same between double and integer  
> (NA_INTEGER, ISNA), but I did not find explanation on passing NA  
> argument as integer.
>
> Any idea of what is wrong in my code?
>

I don't see any problem - in C there is no inherent NA, so what you  
get is NA_INTEGER value which prints as -2147483648 when you print it  
as integer (which is what you do in essai).

Cheers,
S



[Rd] Argument as.integer(NA) to a function C
Simon Urbanek