From osklyar at ebi.ac.uk  Wed Sep 17 22:03:23 2008
From: osklyar at ebi.ac.uk (Oleg Sklyar)
Date: Wed, 17 Sep 2008 21:03:23 +0100
Subject: [Rd] Dates in C api
In-Reply-To: <575EAD86322DA342B50FE422364A9F52082D528B@NYWEXMB27.msad.ms.com>
References: <575EAD86322DA342B50FE422364A9F52082D528B@NYWEXMB27.msad.ms.com>
Message-ID: <48D1628B.103@ebi.ac.uk>

Dates are number of days since 1970-01-01 that is it.

to get data of Date in C:

library(inline)
code = 'Rprintf("%f", REAL(x)[0]); return R_NilValue;'
f = cfunction(signature(x="double"), body=code)
na = f(Sys.date())

to create an object of class Date:
--- in C ---
SEXP res = allocVector(REALSXP, n);
return res;
// one can assign class here, but one can also do it on return to R
--- in R ---
res = .Call("myDateFun", n)
class(res) = "Date"

Best,
Oleg

Lee, Philip (IT) wrote:
> r-devel,
> 
> I've been trying to write a C plugin for R, and I'm struggling to
> understand how dates are represented.
> 
> I can create a date in R:
>> mydate<-as.Date(1, origin="1900-01-01") mydate
> [1] "1900-01-02"
> 
> When I pass my date to a plugin, though, it's type is that of a real.
> There doesn't seem to be a date type in Rinternals.h, is there a way to
> recognize that a value is a date rather than a real?
> 
> Equally, does anyone know if it's possible to create date values in the
> C api?
> 
> Thanks,
> Phil Lee
> 
> Philip Lee
> Morgan Stanley | Technology
> 750 Seventh Avenue, 12th Floor | New York, NY  10019
> Phil.Lee at morganstanley.com
> --------------------------------------------------------
> 
> NOTICE: If received in error, please destroy and notify sender. Sender does not intend to waive confidentiality or privilege. Use of this email is prohibited when received in error.
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
Dr Oleg Sklyar * EBI-EMBL, Cambridge CB10 1SD, UK * +44-1223-494466



[Rd] Dates in C api
Oleg Sklyar