[R] subset function unexpected behavior

David Katz david at davidkatzconsulting.com
Tue Feb 2 05:17:11 CET 2010


I was surprised to see this unexpected behavior of subset in a for loop. I
looked in subset.data.frame and it seemed to me that both versions should
work, since the subset call should be evaluated in the global environment -
but perhaps I don't understand environments well enough. Can someone
enlighten me? In any case, this is a bit of a gotcha for naive users of
subset.

input.data <-
  data.frame(sch=c(1,1,2,2),
             pop=c(100,200,300,400))

school.var <- "sch"

school.list <- 1:2

for(sch in school.list){
  print(sch)
  #do this before subset!:
  right.sch.p <-
    input.data[,school.var] == sch
  print(  subset(input.data,right.sch.p)) #this is what I expected
}

## [1] 1
##   sch pop
## 1   1 100
## 2   1 200
## [1] 2
##   sch pop
## 3   2 300
## 4   2 400


for(sch in school.list){
  print(sch)
  print(subset(input.data,input.data[,school.var] == sch)) #note - compact
version fails!
}

## [1] 1
##   sch pop
## 1   1 100
## 2   1 200
## 3   2 300
## 4   2 400
## [1] 2
##   sch pop
## 1   1 100
## 2   1 200
## 3   2 300
## 4   2 400

-- 
View this message in context: http://n4.nabble.com/subset-function-unexpected-behavior-tp1459535p1459535.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list