I'll use it and share the output with you. Thanks! George Vega Yon +56 9 7 647 2552 http://ggvega.cl
2013/11/5 Prof Brian Ripley <rip...@stats.ox.ac.uk>: > On 05/11/2013 21:12, Gabriel Becker wrote: >> >> George, >> >> I don't see the relevance of the stackoverflow post you linked. In the >> post, the author wanted to change the length of an existing "mother list" >> (matrix, etc), while you specifically state that the length of L1 will not >> change. >> >> You say that the child lists (vectors if they are INTSXP/REALSXP) are >> variable, but that is not what the linked post was about unless I am >> completely missing something. >> >> I can't really say more without knowing the details of how the vectors are >> being created and why they cannot just have the right length from the >> start. >> >> As for the error, that is a weird one. I imagine it means that a SEXP >> thinks that it has a type other than ones defined in Rinternals. I can't >> speak to how that could have happened from what you posted though. > > > Usually it is the result of garbage collection: something which should have > been protected and is not has been re-used. > > The way to find such things is to use a valgrind-instrumented build of R: > see 'Writing R Extensions'. Possibly with gcorture(TRUE) to make it > reproducible. > > > >> >> Sorry I can't be of more help, >> ~G >> >> >> >> On Mon, Nov 4, 2013 at 8:00 PM, George Vega Yon <g.vega...@gmail.com> >> wrote: >> >>> Dear R-devel, >>> >>> A couple of weeks ago I started to use the R C API for package >>> development. Without knowing much about C, I've been able to write >>> some routines sucessfully... until now. >>> >>> My problem consists in dynamically creating a list ("L1") of lists >>> using .Call, the tricky part is that each element of the "mother list" >>> contains two vectors (INTSXP and REALEXP types) with varying sizes; >>> sizes that I set while I'm looping over another list's ("L1") elements >>> (input list). The steps I've follow are: >>> >>> FIRST: Create the "mother list" of size "n=length(L0)" (doesn't >>> change) and protect it as >>> PROTECT(L1=allocVector(VECEXP, length(L0))) >>> and filling it with vectors of length two: >>> for(i=0;i<n;i++) SET_VECTOR_ELT(L1,i, allocVector(VECSXP, 2)); >>> >>> then, for each element of the mother list: >>> >>> for(i=0;i<n;i++) { >>> >>> SECOND: By reading this post in Stackoverflow >>> >>> >>> http://stackoverflow.com/questions/7458364/growing-an-r-matrix-inside-a-c-loop/7458516#7458516 >>> I understood that it was necesary to (1) create the "child lists" and >>> protecting them with PROTECT_WITH_INDEX, and (2) changing its size >>> using SETLENGTH (Rf_lengthgets) and REPROTECT ing the lists in order >>> to tell the GC that the vectors had change. >>> >>> THIRD: Once my two vectors are done ("id" and "lambda"), assign them >>> to the i-th element of the "mother list" L1 using >>> SET_VECTOR_ELT(VECTOR_ELT(L1,i), 0, duplicate(id)); >>> SET_VECTOR_ELT(VECTOR_ELT(L1,i), 1, duplicate(lambda)); >>> >>> and unprotecting the elements protected with index: UNPROTECT(2); >>> >>> } >>> >>> FOURTH: Unprotecting the "mother list" (L1) and return it to R >>> >>> With small datasets this works fine, but after trying with bigger ones >>> R (my code) keeps failing and returning a strange error that I haven't >>> been able to identify (or find in the web) >>> >>> "unimplemented type (29) in 'duplicate'" >>> >>> This happens right after I try to use the returned list from my >>> routine (trying to print it or building a data-frame). >>> >>> Does anyone have an idea of what am I doing wrong? >>> >>> Best regards, >>> >>> PS: I didn't wanted to copy the entire function... but if you need it >>> I can do it. >>> >>> George Vega Yon >>> +56 9 7 647 2552 >>> http://ggvega.cl >>> >>> ______________________________________________ >>> R-devel@r-project.org mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-devel >>> >> >> >> > > > -- > Brian D. Ripley, rip...@stats.ox.ac.uk > Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ > University of Oxford, Tel: +44 1865 272861 (self) > 1 South Parks Road, +44 1865 272866 (PA) > Oxford OX1 3TG, UK Fax: +44 1865 272595 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel