[R] Are loops handled differently in newer versions of R?
Don MacQueen
macq at llnl.gov
Wed Mar 17 05:46:40 CET 2010
Joshua's explanation of rownames makes a lot more sense than my
speculation about conversion to numeric. Rownames of dataframes is an
area in which there have definitely been changes in R in the last
year or two, give or take. (I don't recall details or timing)
Therefore, I find it very plausible that in R 2.8.x the rownames of
your dataframe were different than they are now in R 2.10.x, given
how you constructed the dataframe. This then would be the explanation
of why the script worked in 2.8.x and not in 2.10.x.
-Don
At 8:57 PM -0700 3/16/10, Joshua Wiley wrote:
>Michael,
>
>I have to agree with Don that using a factor as a loop index seems
>like a risky choice. At any rate, part of the problem is that you are
>referencing a nonexistant part of your dataframe. i is an index of
>characters, but your rownames are 1:5, not LETTERS[1:5]. If you give
>your dataframe rownames, you can then use your loop, see below.
>
>########################
>locn<-c("A", "B", "C", "D", "E")
>n<-c(28, 14, 21, 52, 35)
>corr.r<-c(0.40, 0.63, 0.38, 0.44, 0.35)
>
>lab8.dat<-data.frame(locn, n, corr.r)
>lab8.dat
>
>calc.prob.t<-function(n, r)
> {
> df<-n-2
> t<-(r-0)/(sqrt((1-r^2)/df)) # I'm assuming you mean r^2 here not r2
> probt<-2*(pt(t, df, lower.tail=FALSE))
> probt
> }
>
>p_unadj<-NULL # since you assign it to null anyways, there's not real
>point in the other assignment
>p_unadj
>
>for ( i in lab8.dat[,1] )
> p_unadj[i] <- calc.prob.t(lab8.dat[i,2], lab8.dat[i,3])
>
>p_unadj # all NAs as you noticed
>
>rownames(lab8.dat) <- lab8.dat$locn
>
>for ( i in lab8.dat[,1] )
> p_unadj[i] <- calc.prob.t(lab8.dat[i,2], lab8.dat[i,3])
>
>p_unadj # now lab8.dat["A",2] etc. means something, and it works
>
>##############################
>
>
>
>
>On Tue, Mar 16, 2010 at 7:53 PM, Michael Rennie <mdrennie at gmail.com> wrote:
>>
>> Hi gang,
>>
>> I'm perplexed- I have some code that uses for() loops that works fine in R
>> version 2.8 on my mac, worked fine in version 2.8 on my old windows machine,
>> but doesn't work in version 2.10 on windows.
>>
>> The loop implements a function over a data frame (code is included below).
>>
>> In Mac (running version 2.8), the results of the loop are what I expect:
>>
>>> p_unadj
>> [1] 0.034939481 0.015743706 0.089287030 0.001098538 0.039290594
>>
>> But in Windows (running version 2.10.1), I get a bunch of NA's...
>>
>>> p_unadj
>> A B C D E
>> NA NA NA NA NA
>>
>> If I had to guess, I'd say that R v. 2.10 is handling the i in lab8.dat[,1]
>> differently, given that it's keeping the row names in the output for
>> p_unadj... but why would that stop it from applying the function?
>>
>> Any thoughts or suggestions are welcome.
>>
>> Cheers,
>>
>> Mike
>>
>> Here's the code...
>>
>>
>> #build the dataset
>>
>> locn<-c("A", "B", "C", "D", "E")
>> n<-c(28, 14, 21, 52, 35)
>> corr.r<-c(0.40, 0.63, 0.38, 0.44, 0.35)
>>
>> lab8.dat<-data.frame(locn, n, corr.r)
>> lab8.dat
>>
>> attach(lab8.dat)
>>
>> #write the function
>>
>> calc.prob.t<-function(n, r)
>> #given a sample size (n) and correlation coefficient (r), returns the
>> probability for that test
>> {
>> df<-n-2
>> t<-(r-0)/(sqrt((1-r2)/df))
>> probt<-2*(pt(t, df, lower.tail=FALSE))
>> probt
>> }
>>
>> #try out the function...
>> calc.prob.t(lab8.dat$n[1], lab8.dat$corr.r[1])
>> #it works.
>>
>> #write a loop to implement that function for every correlation in your
>> dataset...
>>
>>
>> p_unadj<-numeric(length(lab8.dat[,1]))
>> p_unadj<-NULL
>> p_unadj
>>
>> #all this just built an empty vector to store the results of our loop...
>>
>> for ( i in lab8.dat[,1] )
>> p_unadj[i]<-calc.prob.t(lab8.dat[i,2], lab8.dat[i,3])
>>
>> p_unadj
>>
>> #if executed on my Mac, running R v.2.8, this works (and did using 2.8 on my
>> old windows machine). Running v. 2.10 in Windows, I get NAs.
>>
>> --
>> Michael D. Rennie, Ph.D.
>> Postdoctoral Fellow, Environmental and Life Sciences Program
>> Trent University
> > 2140 East Bank Drive, DNA Building (2nd Floor)
>> Peterborough, Ontario K9J 7B8
>> Vox:705.755.2287 Fax:705.755.1559
>> www.*people.trentu.ca/michaelrennie
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://*stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>>http://*www.*R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
>
>
>--
>Joshua Wiley
>Senior in Psychology
>University of California, Riverside
>http://*www.*joshuawiley.com/
>
>______________________________________________
>R-help at r-project.org mailing list
>https://*stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide http://*www.*R-project.org/posting-guide.html
>and provide commented, minimal, self-contained, reproducible code.
--
---------------------------------
Don MacQueen
Lawrence Livermore National Laboratory
Livermore, CA, USA
925-423-1062
macq at llnl.gov
More information about the R-help
mailing list