

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<n2
t<(r0)/(sqrt((1r2)/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
______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


Try
for ( i in seq(nrow(lab8.dat)) )
p_unadj[i]<calc.prob.t(lab8.dat[i,2], lab8.dat[i,3])
The first column of lab8.dat is a factor, and you're trying to use it
as a loop index as if it were an integer. (Which I would consider
dangerous.)
No, loops are not handled differently, but automatic conversion of
factors to numeric apparently is.
Don
At 10:53 PM 0400 3/16/10, Michael Rennie 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<n2
> t<(r0)/(sqrt((1r2)/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
>
>______________________________________________
> [hidden email] mailing list
> https://*stat.ethz.ch/mailman/listinfo/rhelp>PLEASE do read the posting guide http://*www.*Rproject.org/postingguide.html>and provide commented, minimal, selfcontained, reproducible code.


Don MacQueen
Lawrence Livermore National Laboratory
Livermore, CA, USA
9254231062
[hidden email]
______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


Michael Rennie <mdrennie <at> gmail.com> writes:
>
>
> 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
Hi Michael,
I'm not sure what the mac is doing, but if you change the syntax of the loop as
follows it gives the same answers:
> for ( i in 1:length(lab8.dat[,1]) )
+ p_unadj[i]<calc.prob.t(lab8.dat[i,2], lab8.dat[i,3])
> p_unadj
[1] 0.034939481 0.015743706 0.089287030 0.001098538 0.039290594
Hope this helps,
Michael Bibo,
Queensland Health
______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


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<n2
t<(r0)/(sqrt((1r^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 < [hidden email]> 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<n2
> t<(r0)/(sqrt((1r2)/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
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/rhelp> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> and provide commented, minimal, selfcontained, reproducible code.
>

Joshua Wiley
Senior in Psychology
University of California, Riverside
http://www.joshuawiley.com/______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


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<n2
> t<(r0)/(sqrt((1r^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 < [hidden email]> 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<n2
>> t<(r0)/(sqrt((1r2)/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
>>
>> ______________________________________________
>> [hidden email] mailing list
>> https://*stat.ethz.ch/mailman/listinfo/rhelp>> PLEASE do read the posting guide
>> http://*www.*Rproject.org/postingguide.html>> and provide commented, minimal, selfcontained, reproducible code.
>>
>
>
>
>
>Joshua Wiley
>Senior in Psychology
>University of California, Riverside
> http://*www.*joshuawiley.com/>
>______________________________________________
> [hidden email] mailing list
> https://*stat.ethz.ch/mailman/listinfo/rhelp>PLEASE do read the posting guide http://*www.*Rproject.org/postingguide.html>and provide commented, minimal, selfcontained, reproducible code.


Don MacQueen
Lawrence Livermore National Laboratory
Livermore, CA, USA
9254231062
[hidden email]
______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


Thanks everyone for your assistance with this! Very much appreciated,
and the students of my statistics course will also be pleased to have a
fix ;)
Mike
Don MacQueen wrote:
> 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<n2
>> t<(r0)/(sqrt((1r^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 < [hidden email]>
>> 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<n2
>>> t<(r0)/(sqrt((1r2)/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
>>>
>>> ______________________________________________
>>> [hidden email] mailing list
>>> https://*stat.ethz.ch/mailman/listinfo/rhelp>>> PLEASE do read the posting guide
>>> http://*www.*Rproject.org/postingguide.html>>> and provide commented, minimal, selfcontained, reproducible code.
>>>
>>
>>
>>
>> 
>> Joshua Wiley
>> Senior in Psychology
>> University of California, Riverside
>> http://*www.*joshuawiley.com/>>
>> ______________________________________________
>> [hidden email] mailing list
>> https://*stat.ethz.ch/mailman/listinfo/rhelp>> PLEASE do read the posting guide
>> http://*www.*Rproject.org/postingguide.html>> and provide commented, minimal, selfcontained, reproducible code.
>
>
______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.

