如何在 Rmath.h 中使用 C 中的多项式函数

How to use multinomial function in C with Rmath.h

我试图在 Rmath.h 的帮助下,在 C 中长度为 4 的给定概率向量下从 1、2、3、4 中抽取随机样本。我发现这行代码可以为我做到这一点。

inline void rmultinom(int n, double* prob, int k, int* rn)

比如我可以写成随机抽取一个样本。

double p[4]={.1, .2, .3, .2};

rmultinom(1, p, 1, int* rn)

但是,我不知道第 4 个参数应该是什么。在 R 中,rmultinom 函数只需要前三个参数。另一个问题是这个函数的 return 是什么。有什么方便的方法可以用 1、2、3、4 中的一个 return 吗?

这是一个简单的例子

#define MATHLIB_STANDALONE 1
#include "Rmath.h"
#include <stdio.h>

int main(int argc, char** argv) {
    int draws = 100;
    int classes = 4;
    int vals[classes];
    double probs[4] = {0.1, 0.2, 0.4, 0.3};

    set_seed(123, 456);
    rmultinom(draws, probs, classes, vals);

    for(int j=0; j < classes; j++) {
        printf("Count of class %i drawn: %i\n", j, vals[j]);
    }
    return 0;
}

在这里,我们从具有 4 个 类 的跨国发行版中抽取 100 个。我们得到一个长度为 4 的向量,表示每个 类 中有多少个值。例如我得到了

Count of class 0 drawn: 9
Count of class 1 drawn: 14
Count of class 2 drawn: 43
Count of class 3 drawn: 34