我已经看到这个答案的高低,所以我诉诸张贴在这里。 如果我有一个Linux C ++程序调用R脚本/函数像RCpp的东西有没有任何明显的延迟期望? 这是预料甚至是合理的吗? 如果我从Java JAR文件中使用像RCaller这样的东西呢? 如果调用相同的R脚本/函数,你认为C ++是否比Java更快? 任何预期的差异? 谢谢
我认为你需要RInside ,这使得在你的C ++应用程序中嵌入R非常容易。 它带有四个目录中的大量例子,包括一些与Qt,Wt(用于webapps)和MPI一起使用的例子。
在这个框架中,你在启动时初始化R,然后拥有你自己的实例。 往返等待时间将是无论发送命令给R实例需要多长时间,还是长R需要(这可能占主导地位)加上返回。
RInside使用Rcpp,所以你得到整个对象转移和所有其他的细微差别 。 看一下RInside的例子,并在rcpp-devel列表上发布问题。
我没有R的外部功能接口或RCpp的专门知识,但已与其他不少人合作。 你的问题不能被肯定地回答。 只有一些经验法则。 FFI的工作是满足呼叫和被呼叫环境的假设。 这通常是通过从一个到另一个复制来匹配两种语言的数据布局。 (这是RCpp的全部。)或者你可以非常幸运,让他们匹配。 如果运行时环境相似,或者在语言之间的边界上移动的数据很小,这可能是非常高效的:比自我调用的代价更高。 由于这个原因,从Fortran调用C通常非常快。 如果环境非常不同,则必须复制大型数据结构。 副本消耗资源:内存和处理器周期。 垃圾收集是环境差异的代名词,独立的收藏家很少(永远不会阅读)合作。 R和Java(垃圾收集)都可能需要复制。 如果您正在为calL R编写C ++,则可以在RCpp结构中设置数据,以便不需要任何副本。
我会写一些从C ++开始的小测试,模仿你必须通过接口移动的数据量。 运行并计时以获得管理费用。 从这你可以做出真正的决定。