[Rd] ScalarLogical and setAttrib
Hadley Wickham
h.wickham at gmail.com
Sat Nov 1 06:08:27 CET 2014
I believe this is by design (and changed relatively recently). FALSE and
TRUE are singletons, like NULL.
Hadley.
On Friday, October 31, 2014, Jeroen Ooms <jeroen.ooms at stat.ucla.edu> wrote:
> Is it expected that attributes set on a LGLSXP created by
> ScalarLogical will apply to all future objects created by
> ScalarLogical as well? For example: the 'test1' function below returns
> FALSE and 'test2' returns FALSE with an attribute:
>
> library(inline)
> test1 <- cfunction(body = 'return ScalarLogical(0);')
> test2 <- cfunction(body = '
> SEXP success = PROTECT(ScalarLogical(0));
> setAttrib(success, install("foo"), mkString("bar"));
> UNPROTECT(1);
> return success;
> ')
>
> However after running test2(), then test1() will also return the attribute:
>
> > test1()
> [1] FALSE
> > test2()
> [1] FALSE
> attr(,"foo")
> [1] "bar"
> > test1()
> [1] FALSE
> attr(,"foo")
> [1] "bar"
>
> It seems like ScalarLogical returns a singleton object, which is not
> the case for ScalarInteger or ScalarReal. I am currently working
> around this using duplicate(ScalarLogical(0)), but was quite surprised
> by this behavior of ScalarLogical.
>
> ______________________________________________
> R-devel at r-project.org <javascript:;> mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
--
http://had.co.nz/
[[alternative HTML version deleted]]
More information about the R-devel
mailing list