It seems that R (unlike S-plus) allows assignments to elements of a
vector objects even when the object do not exists locally (inside a
fucntion) in cases where an object of the same name exists globally. I
guess this is not really desired behaviour:
R v1.8.0
> a
Error: Object "a" not found
> testfunc <- function() {a[1]<-1; a}
> testfunc()
Error in testfunc() : Object "a" not found
> a<-2
> testfunc()
[1] 1
> a
[1] 2
S-plus v6.0
> a
Problem: Object "a" not found
> testfunc <- function() {a[1]<-1; a}
> testfunc()
Problem in testfunc(): Object "a" not found
Use traceback() to see the call stack
> a <- 2
> testfunc()
Problem in testfunc(): object "a" must be assigned locally before
replacement
Use traceback() to see the call stack
On Fri, 16 Jan 2004 11:12:31 +0100 (CET), you wrote:>It seems that R (unlike S-plus) allows assignments to elements of a >vector objects even when the object do not exists locally (inside a >fucntion) in cases where an object of the same name exists globally. I >guess this is not really desired behaviour:Please don't post things as bugs unless you're reasonably sure they're bugs. This is a difference between R and S-PLUS. It's well documented that R and S-PLUS have different scoping rules (see 3.3.1"Lexical Scoping" in the FAQ), but I don't think that's coming into play here. What we have is a reference to a global variable that modifies it. For some reason S-PLUS doesn't allow that, but R does. Why do you think it's a bug in R? Duncan Murdoch