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 <radford@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]]

