On Oct 13, 2011, at 3:20 AM, Alok Jadhav wrote: > I am a bit confused about usage of R internal functions. I am able to send a > char vector from C to R but not sure on how to send a vector of strings etc. > > My code looks like this. > > <code> > > SEXP result = > PROTECT(Rf_allocMatrix(STRSXP,s->n_rics,s->n_fields)); > > int i,j; > for (i=0; i < s->n_rics; i++) > { > for (j=0; j < s->n_fields; j++) > { > std::string text = s->data[j][i]; > result[j][i] = R_alloc( text.length(), > sizeof(char)); > //strcpy(result[j][i], text.c_str()); > > SET_STRING_ELT(result[j][i],0,Rf_mkChar(text.c_str())); > } > } > > // memcpy(result,s->data.ref(),s->n_fields*s->n_rics*sizeof(200)); > UNPROTECT(1); > return result; > > </code> > > Can someone please make me understand this usecase and how to resolve it? >
It's more simple than that: int rows = s->n_rics, cols = s->n_fields; SEXP result = PROTECT(Rf_allocMatrix(STRSXP, rows, cols)); for (int i = 0; i < rows; i++) for (int j = 0; j < cols; j++) SET_STRING_ELT(result, i + j * rows, Rf_mkChar(s->data[j][i].c_str())); UNPROTECT(1); return result; Cheers, Simon > thanks, > Alok > > -- > View this message in context: > http://r.789695.n4.nabble.com/how-to-return-a-matrix-of-strings-from-c-to-R-tp3900763p3900763.html > Sent from the R devel mailing list archive at Nabble.com. > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel