我需要在我的C ++代码中运行R中的统计函数。有没有办法从我的C ++代码中调用它们?我正在使用VS 2005,我是否需要包含任何头文件或链接任何库?我使用他们网站提供的标准Windows安装程序安装了R。
问候,
答案 0 :(得分:4)
简言之:
正如相当频繁地说过的那样,R本身并不构建 VS *使C代码链接很难但可能和C ++代码 不可能(因为功能标题信息未标准化)。
根据标准,Rcpp和RInside在Windows上运行良好 Windows工具链。 (RInside确实有一个错误,但现在已经修复了。)
Rcpp常见问题解答更多关于VS *的说法(即您不能指望这一点 如果R本身不能与编译器一起工作,那么
如果您必须使用VS *,那么您最好的选择可能是松散耦合 通过网络和使用Rserve。
如果你可以切换编译器,那么Rcpp / rnside可能是有意义的;和 其余的R API也可供您使用。
Rcpp等人有大量文档,包括Rcpp-introduction pdf(也就是说 同时评论的文章)和前面提到的Rcpp-FAQ ---以及专门的邮件列表。
请不要交叉发帖。我也刚刚回答了这个on r-help。
答案 1 :(得分:-1)
https://rforge.net/Rserve/files/上提供的Rserve二进制版本不是在Microsoft Visual C ++下构建的。在文件ReadMe.txt中,作者指出没有Windows配置,但有一个特殊的Makefile.win。我们没有成功构建它,使用" make -f Makefile.win",因为没有提供文件config.h(只有config.h.in)。
因此,请在头文件Rsrv.h中注释以下行:
// #include"配置.h"
在此阶段,会生成以下错误:
rsrv .h(384):致命错误C1189:#error:"无法确定字节序。确保包含配置.h或_ _ {BIG | LITTLE} _ENDIAN__已定义。"
/* Windows is little-endian is most cases, anywhere else we're stuck*/
# error "Cannot determine endianness. Make sure config.h is included or __{BIG|LITTLE}_ENDIAN__ is defined ."
# endif
由:
/********* MODIFICATION *************/
/* # error "Cannot determine endianness. Make sure config.h is included or __{BIG|LITTLE}_ENDIAN__ is defined ." */
/************************************/
#define _BIG_ENDIAN (*(uint16_t *)?\xff? < 0x100)
/* indicate to the linker that the Ws2_32.lib file is needed */
#pragma comment(lib, "Ws2_32.lib")
使用Winsock的应用程序必须与Ws2_32.lib库文件链接。
有关通过Rserve进行R和Microsoft Visual C ++集成的更多详细信息,请访问https://www.researchgate.net/publication/305789407_Rserve_for_Windows_case_of_R_and_Microsoft_Visual_C_integration