有没有办法从C将POSIXct对象返回给R?

Sam*_*yan 2 c c++ r

我想在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)

Jos*_*ich 7

轻松设置课程.

#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)