Thank you for the wonderful suggestion . do you suggest to protect ScalarInteger(1) before calling lang3 ?
Thanks On Thu, Jun 26, 2014 at 1:36 PM, Radford Neal <radf...@cs.toronto.edu> wrote: > >> PROTECT(dfm=lang3(install("data.frame"),df,ScalarLogical(FALSE))); > >> SET_TAG(CDDR(dfm), install("stringsAsFactors")) ; > >> SEXP res = PROTECT(eval(dfm,R_GlobalEnv)); > >> PROTECT(head=lang3(install("head"),res,ScalarInteger(1))); > >> head = PROTECT(eval(head,R_GlobalEnv)); > >> > >> > >> I tried the above following , it seemed to be not working . Can you > please > >> help. > >> > > > >Can you elaborate? The above code works AFAICT ... > > The code is actually not safe. Both "install" and "SalarLogical/Integer" > potentially allocate memory, so at least one needs to be protected before > callling lang3. (Passing one such argument would be OK, since lang3 > protects its arguments, but it doesn't get a chance to do that while they > are still being evaluated.) > > Now, I'm not sure this is the source of the actual problem, since both > "data.frame" and "head" presumably already exist, so the install won't > actually allocate memory. But this is not a safe coding method in > general. > > Radford Neal > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel