में यादृच्छिक संख्या जनरेटर की आपूर्ति की मैं ऐसा लगता है किएक उपयोगकर्ता सीडिंग आर
set.seed(123, kind='user', normal.kind='user')
वास्तव में उपयोगकर्ता परिभाषित RNG प्रारंभ करने के लिए 123
पास नहीं आर में एक उपयोगकर्ता परिभाषित RNG बोने के साथ कुछ समस्या हो रही है।
मैं ?Random.user
पर उपलब्ध दस्तावेज पर वापस गया और वहां दिए गए उदाहरण कोड का प्रयास किया, जिसमें मामूली संशोधन के साथ मैंने user_unif_init
फ़ंक्शन (नीचे पूर्ण कोड) को पारित बीज मुद्रित किया।
कदम पुन: पेश करने:
- पेस्ट नीचे कोड में
urand.c
- भागो
R CMD SHLIB urand.c
- ओपन
R
भागो निम्न कमांड:
> dyn.load('urand.so') > set.seed(123, kind='user', normal.kind='user') Received seed: 720453763 Received seed: 303482705 // any other numbers than 123
यहाँ पूर्ण कोड मैं urand.c
में प्रयोग किया जाता है:
// ## Marsaglia's congruential PRNG
#include <stdio.h>
#include <R_ext/Random.h>
static Int32 seed;
static double res;
static int nseed = 1;
double * user_unif_rand()
{
seed = 69069 * seed + 1;
res = seed * 2.32830643653869e-10;
return &res;
}
void user_unif_init(Int32 seed_in) {
printf("Received seed: %u\n", seed_in);
seed = seed_in;
}
int * user_unif_nseed() { return &nseed; }
int * user_unif_seedloc() { return (int *) &seed; }
/* ratio-of-uniforms for normal */
#include <math.h>
static double x;
double * user_norm_rand()
{
double u, v, z;
do {
u = unif_rand();
v = 0.857764 * (2. * unif_rand() - 1);
x = v/u; z = 0.25 * x * x;
if (z < 1. - u) break;
if (z > 0.259/u + 0.35) continue;
} while (z > -log(u));
return &x;
}
किसी भी मदद की बहुत सराहना की जाएगी!
एक नज़र डालने के लिए धन्यवाद! यह जानना अच्छा लगता है कि यह सुसंगत है, लेकिन यह वास्तव में मेरी समस्या का समाधान नहीं करता है। मुझे सी फ़ंक्शन में '123'' प्राप्त करने में सक्षम होना चाहिए। क्या ब्लैक जादू को बाईपास या पूर्ववत करने का कोई तरीका है कि आर इस प्रतीत होता है कि यह प्रतीत होता है? – GjjvdBurg
अद्यतन के लिए धन्यवाद! मुझे एक विशिष्ट आवेदन के लिए बीज पर नियंत्रण की आवश्यकता है। आपका समाधान एक अच्छा काम है, लेकिन यह मेरे प्रश्न का काफी जवाब नहीं देता है। मुझे आश्चर्य है कि आर बीज के साथ क्या कर रहा है और किस उद्देश्य के लिए यह उपयोगी होगा। – GjjvdBurg