我想在C/C++中创建一个datetime对象的向量,然后将它们返回给R.在POSIXct类的文档中,写入它自1970-01-01以来保持秒数作为数值的向量,所以我想那里应该是一种在C中从double转换为POSIXct的方法.
我有这个C代码,并希望返回POSIXct日期而不是REAL数字.
SEXP func()
{
SEXP dates;
PROTECT(dates = allocVector(REALSXP, 2));
REAL(dates)[0] = 1402329599.12456;
REAL(dates)[1] = 1402329600.85404;
UNPROTECT(1);
return dates;
}
Run Code Online (Sandbox Code Playgroud)
轻松设置课程.
#include <R.h>
#include <Rdefines.h>
SEXP func()
{
SEXP dates, class;
PROTECT(dates = allocVector(REALSXP, 2));
REAL(dates)[0] = 1402329599.12456;
REAL(dates)[1] = 1402329600.85404;
class = PROTECT(allocVector(STRSXP, 2));
SET_STRING_ELT(class, 0, mkChar("POSIXct"));
SET_STRING_ELT(class, 1, mkChar("POSIXt"));
classgets(dates, class);
UNPROTECT(2);
return dates;
}
Run Code Online (Sandbox Code Playgroud)
您可能还想设置该tzone属性.
#include <R.h>
#include <Rdefines.h>
SEXP func()
{
SEXP dates, class, tz_attr;
PROTECT(dates = allocVector(REALSXP, 2));
REAL(dates)[0] = 1402329599.12456;
REAL(dates)[1] = 1402329600.85404;
class = PROTECT(allocVector(STRSXP, 2));
SET_STRING_ELT(class, 0, mkChar("POSIXct"));
SET_STRING_ELT(class, 1, mkChar("POSIXt"));
classgets(dates, class);
tz_attr = PROTECT(allocVector(STRSXP, 1));
SET_STRING_ELT(tz_attr, 0, mkChar("GMT"));
setAttrib(dates, install("tzone"), tz_attr);
UNPROTECT(3);
return dates;
}
Run Code Online (Sandbox Code Playgroud)