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@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel