【问题标题】:C probability library similar to R类似于 R 的 C 概率库
【发布时间】:2012-04-10 11:12:24
【问题描述】:

有谁知道有一些标准概率函数的 C 库,例如 Rs 示例函数?我发现了这个:

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

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

【问题讨论】:

  • 如果您有几千英镑的闲钱,您可以从 MATLAB 生成 C 代码。您需要用于采样函数的 Statistics 工具箱和用于生成 C 的 Coder 工具箱。
  • @RichieCotton 谢谢,我去看看。
  • @AndresT 谢谢,我去看看。

标签: c r statistics


【解决方案1】:

您始终可以将 R 本身嵌入到您的 C 应用程序中。这是可行的,并且有文档记录,但有点乏味,因为 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 987654329@)。

【讨论】:

    【解决方案2】:

    谷歌搜索C statistics library,让我在 GSL 中获得了一些不错的结果。另请参阅this SO question 了解更多提示。但是,我认为您最好的选择是将 R 集成到您的 C 代码中。您可以通过两种方式做到这一点:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2017-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-27
        • 2018-10-29
        • 2016-03-21
        • 1970-01-01
        相关资源
        最近更新 更多