问题描述
我正试图在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函数仅需要前三个参数。另一个问题是此函数返回什么。用1,2,3,4之一返回有什么方便的方法吗?
解决方法
这是一个简单的例子
#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