9 SEXP t0, times, x0, x, y;
10 SEXP ans = R_NilValue, ans_names = R_NilValue;
12 int return_type = *(INTEGER(rettype));
14 if (LENGTH(nsim) != 1)
err(
"'nsim' must be a single integer");
18 PROTECT(t0 = GET_SLOT(
object,install(
"t0")));
19 PROTECT(times = GET_SLOT(
object,install(
"times")));
23 PROTECT(simnames = GET_COLNAMES(GET_DIMNAMES(x0)));
36 switch (return_type) {
40 PROTECT(ans = NEW_LIST(2));
41 PROTECT(ans_names = NEW_CHARACTER(2));
43 SET_STRING_ELT(ans_names,0,mkChar(
"states"));
44 SET_STRING_ELT(ans_names,1,mkChar(
"obs"));
45 SET_NAMES(ans,ans_names);
57 int nvar, npar, nobs, nsim, ntim, nparsets;
60 PROTECT(po = duplicate(
object));
61 SET_SLOT(po,install(
"t0"),t0);
62 SET_SLOT(po,install(
"times"),times);
64 xdim = INTEGER(GET_DIM(x));
65 nvar = xdim[0]; nsim = xdim[1]; ntim = xdim[2];
67 xdim = INTEGER(GET_DIM(y));
70 xdim = INTEGER(GET_DIM(
params));
71 npar = xdim[0]; nparsets = xdim[1];
73 dim[0] = nvar; dim[1] = ntim;
76 SET_SLOT(po,install(
"states"),xx);
78 dim[0] = nobs; dim[1] = ntim;
81 SET_SLOT(po,install(
"data"),yy);
83 PROTECT(pp = NEW_NUMERIC(npar));
84 SET_NAMES(pp,GET_ROWNAMES(GET_DIMNAMES(
params)));
85 SET_SLOT(po,install(
"params"),pp);
87 PROTECT(ans = NEW_LIST(nsim));
88 SET_NAMES(ans,simnames);
92 for (k = 0; k < nsim; k++) {
95 double *xs = REAL(x), *ys = REAL(y), *ps = REAL(
params);
98 PROTECT(po2 = duplicate(po));
99 xt = REAL(GET_SLOT(po2,install(
"states")));
100 yt = REAL(GET_SLOT(po2,install(
"data")));
101 pt = REAL(GET_SLOT(po2,install(
"params")));
103 memcpy(pt,ps+npar*(k%nparsets),npar*
sizeof(
double));
106 for (j = 0; j < ntim; j++) {
107 for (i = 0; i < nvar; i++, xt++) *xt = xs[i+nvar*(k+nsim*j)];
108 for (i = 0; i < nobs; i++, yt++) *yt = ys[i+nobs*(k+nsim*j)];
111 SET_ELEMENT(ans,k,po2);