gpt4 book ai didi

r - 如何在Rcpp中使用xts包的C api

转载 作者:行者123 更新时间:2023-12-02 19:42:23 24 4
gpt4 key购买 nike

xts-0.9-1包提供的xts_API for C不能直接在C++中使用。

例如,如果有人写

#include <Rcpp.h>
extern "C" {
#include <xts.h>
}

using namespace Rcpp;

RcppExport SEXP get_xts_index(SEXP x, SEXP value) {
BEGIN_RCPP

return SET_xtsIndexClass(x, value);

END_RCPP
}

将会出现以下编译时错误:

  • 错误:‘)’标记之前的预期标识符
  • 错误:“install”未在此范围内声明
  • 错误:“getAttrib”未在此范围内声明
  • 错误:“setAttrib”未在此范围内声明
  • 错误:“xts_IndexvalueSymbol”未在此范围内声明

如何调用C语言的xts_API?

最佳答案

你有什么版本的xts?以下对我有用:

library(xts)
library(inline)

inc <- '
extern "C" {
#define class xts_class
#include <xts.h>
#undef class
}


inline SEXP install(const char* x) {
return Rf_install(x);
}

inline SEXP getAttrib(SEXP a, SEXP b) {
return Rf_getAttrib(a, b);
}


inline SEXP setAttrib(SEXP a, SEXP b, SEXP c) {
return Rf_setAttrib(a, b, c);
}

#include <Rcpp.h>
'

src <- '
return GET_xtsIndexClass(x);
'

Sys.setenv("PKG_CXXFLAGS"="-I/usr/local/lib/R/site-library/xts/include")
xtsfun <- cxxfunction(signature(x="ANY"), body=src, inc=inc, plugin="Rcpp")

我可以运行:

R> xtsfun <- cxxfunction(signature(x="ANY"), body=src, inc=inc, plugin="Rcpp")
R> foo <- xts(1:5, order.by=Sys.time()+0:4)
R> xtsfun(foo)
[1] "POSIXct" "POSIXt"
R>

包含标志设置需要通用化,但如果您来到 rcpp-devel 列表,我们就可以解决这个问题。

编辑:我开始尝试一个附加包,它与 xts 的 API(目前比较有限)接口(interface);请参阅 R-Forge 上的 Rcpp SVN 存储库。我还在 Rcpp Gallery 添加了一个新答案 show how to access xts components来自 C++ 代码。有比这里使用的更好的方法来获取属性(使用 Rcpp API)(基于 R 的 C API)。

编辑 2: 现在有一个新包 RcppXts这对此有所帮助。

关于r - 如何在Rcpp中使用xts包的C api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14274055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com