C概率库类似于R.

时间:2012-04-08 20:46:49

标签: c r statistics

有没有人知道有一些标准概率函数的C库,比如R的样本函数?我发现了这个:

http://www.gnu.org/software/gsl/

我想知道是否有人有过任何经验(效率如何)以及是否还有其他任何经验。感谢。

3 个答案:

答案 0 :(得分:7)

您始终可以在您的C应用程序中嵌入R本身。这是可行的,并且有文档说明,但由于API非常简单,所以有点乏味。

如果您对C ++持开放态度,那么感谢RInside会更容易。如果你能在R:

中做到这一点
R> set.seed(123); sample(LETTERS[1:5], 10, replace=TRUE)
 [1] "B" "D" "C" "E" "E" "A" "C" "E" "C" "C"
R> 

由于RInside

,你可以很容易地用C ++做同样的事情
edd@max:~/svn/rinside/pkg/inst/examples/standard$ cat rinside_sample12.cpp
// Simple example motivated by StackOverflow question on using sample() from C
//
// Copyright (C) 2012  Dirk Eddelbuettel and Romain Francois

#include <RInside.h>                    // for the embedded R via RInside

int main(int argc, char *argv[]) {

  RInside R(argc, argv);                // create an embedded R instance

  std::string cmd = "set.seed(123); sample(LETTERS[1:5], 10, replace=TRUE)";

  Rcpp::CharacterVector res = R.parseEval(cmd);   // parse, eval + return result 

  for (int i=0; i<res.size(); i++) {
    std::cout << res[i] << " ";
  }
  std::cout << std::endl;

  exit(0);
}

edd@max:~/svn/rinside/pkg/inst/examples/standard$ 

并且假设它使用相同的RNG种子运行相同的代码,它也会返回相同的结果:

edd@max:~/svn/rinside/pkg/inst/examples/standard$ ./rinside_sample12
B D C E E A C E C C 
edd@max:~/svn/rinside/pkg/inst/examples/standard$ 

如果您只是将我在上面显示的代码放到现有RInside安装的目录examples/standard中并说make,那么将生成可执行文件,并为其提供与源文件相同的基本名称(此处为{来自rinside_sample12)的{1}}。

答案 1 :(得分:3)

在Google上搜索C statistics library,与GSL一起获得了一些好评。有关更多提示,另请参阅this SO question。但是,我认为您最好的选择是将R集成到您的C代码中。您可以通过两种方式执行此操作:

  • 通过系统调用呼叫R.这是一个非常简单但有效的选择。特别是当R和C之间没有大量数据来回传递时,这非常有效。例如,在Python中调试R代码非常困难。
  • 在C中创建直接连接表单到R会话。当有大量数据在R和C之间来回传递时,这非常有效,因为所有数据都通过内存而不是磁盘。然而,我预测写入比第一个解决方案更难。有关详细信息,请参阅this SO post

答案 2 :(得分:0)

你看过元数字吗?它主要是一个统计库。开源,c#。