[R] inconsistent output when using variable substitution

Dieter Menne dieter.menne at menne-biomed.de
Sat May 31 12:05:43 CEST 2008


Robert Felty <robfelty <at> indiana.edu> writes:

> 
> I am extremely puzzled by this behavior in R. I have a data frame called 
> Trials in which I have results from an experiment. I am trying to do a 
> subjects analysis, but getting weird results. Each row has 1 trial in it, 
> which includes a column for the subject number I get the list of subject 
> numbers like so:
> > Subj=unique(sort(Trials$Subj))
> Then I loop over them. But I get strange results. As a test, I tried the 
> following:
> > i=1
> > Subj[i]
> [1] 49
> > thisSubj = subset(Trials,Trials$Subj==Subj[i])
> > thisSubj$Ansr[1]
> [1] "abacus"
> > thisSubj = subset(Trials,Trials$Subj==49)
> > thisSubj$Ansr[1]
> [1] "able"
> 
> I am expecting to get a result of "able" both times, since I know that Subj[i] 
> is 49, when i=1. Clearly the two different "thisSubj=..." lines are not 
> returning the same values, as I would expect them to.

Yes, this is "expected behavior", but nevertheless sonfusing and a source of
some unexpected errors.

The sorting leads to a re-arrangement of the levels, so that Subj is a different
beast after the sorting. 

Please, do post complete, self-running examples next time that can be pasted
into RGui. It needs 2 minutes to find the problem in the example below, and 10
minutes to resolve the "what did he think" and remove the >

Dieter

--------------------------------------
Trials = data.frame(Subj=c(7,5,5,3,3,7),
                    Ansr = letters[1:6])
Trials$Subj = as.factor(Trials$Subj)
Subj = unique(Trials$Subj)

str(Subj)
# Factor w/ 3 levels "3","5","7": 3 2 1
Subj[1]
subset(Trials, Trials$Subj==Subj[1])


Subj = sort(unique(Trials$Subj))
str(Subj)
# Factor w/ 3 levels "3","5","7": 1 2 3
Subj[1]
subset(Trials, Trials$Subj==Subj[1])



More information about the R-help mailing list