如何在 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
我试图在 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