#r #c #multinomial
#r #c #многочленная
Вопрос:
Я пытаюсь нарисовать случайную выборку из 1,2,3,4 при заданном векторе вероятности длиной четыре в C с помощью Rmath.h. Я обнаружил, что эта строка кода может сделать это за меня.
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?
Комментарии:
1. Похоже, что rn — это возвращаемое значение. Передайте адрес переменной int, которую вы хотите использовать для сохранения результата. Также k, выглядит как размер вектора проблемы.
2. Да, обратите внимание, что функция имеет возвращаемый тип void, поэтому на самом деле она ничего не «возвращает». Он ожидает, что вы передадите указатель на массив, который хотите заполнить значениями. Она заполнит данные для вас там.
Ответ №1:
Вот простой пример
#define MATHLIB_STANDALONE 1
#include "Rmath.h"
#include <stdio.h&&t;
int main(int ar&c, char** ar&v) {
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: %in", j, vals[j]);
}
return 0;
}
Здесь мы делаем 100 извлечений из многонационального дистрибутива с 4 классами. Мы получаем обратно вектор длиной 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