[R] subset function unexpected behavior

Thomas Lumley tlumley at u.washington.edu
Tue Feb 2 18:50:29 CET 2010

On Tue, 2 Feb 2010, David Katz wrote:

> Thanks, that helps! Subset creates a new context where a name clash can
> occur. So if I don't want to check for that possibility, I should use a
> special kind of index like .sch, or avoid subset:
> for(sch in school.list){
>  print(sch)
>  print(input.data[input.data[,school.var] == sch,])}
> which works no matter what variable names I use. That seems like a
> reasonable requirement for good code.
> (Checking for a name clash would be at least theoretically needed since
> school.var is a parameter that can be any character name.)
> Although subset conveniently avoids extra typing in many cases (not here),
> this suggests to me that it's not ideal for code that can be used in a
> variety of contexts. Note that unlike "attach", subset does not issue a
> warning!

attach() doesn't issue a warning for this situation,  it warns when a variable in the data set *fails to* mask one in the global environment.  subset() can't fail to mask variables further up the search path, so it doesn't ever warn.


Thomas Lumley			Assoc. Professor, Biostatistics
tlumley at u.washington.edu	University of Washington, Seattle

More information about the R-help mailing list