[R] warning in a loop

Mike Meredith mmeredith at wcs.org
Sun Jun 24 10:54:54 CEST 2007



You can investigate what's gone wrong after the loop has failed by looking
at the values of i, k, p, and t. Although d[(d[,(i+1)]%in%1),1] produces a
vector, k has only one element. Same with p. Should then be obvious why the
t.test produces an error.

The problem is with the [i] index for k and p; take those away and it works.
If you want to keep the values generated in the loop, make k and p lists and
index with k[[i]] and p[[i]].


A better way to do this would be to use 'sample' to randomize the measured
values in d[,1] and then use d[,2] to group them for testing. You can then
use hundreds of iterations:

t <- rep(NA, 999) 
for(i in 1:999) {
   samp <- sample(d[,1])
   t <- t.test(samp[d[,2]==1], samp[d[,2]==2])$p.value
}
sum(t < 0.05)  # How many were 'significant'?

Note that I prefer to use t <- rep(NA,...) to allocate space, rather than
1:999, so that NA appears as the result if there's a problem.

Why not just do a randomization test?

t <- rep(NA, 1000)
t[1] <- mean(d[d[,2]==1,1]) - mean(d[d[,2]==2,1]) # This is the observed
difference in means
for(i in 2:1000) {
   samp <- sample(d[,1])
   t[i] <- mean(samp[d[,2]==1]) - mean(samp[d[,2]==2])
}
t <- abs(t)   # Skip this line if you want a 1-sided test
sum(t >= t[1])/1000  # This is the 'p-value'

HTH, Mike.


Tavpritesh Sethi wrote:
> 
> hi all,
> I have a matrix with first column having some measurable values, these are
> indexed by the numerals 1,2 and 3 in the other columns of the data and may
> be interpreted as values for categories 1,2 and 3.
> I have written the following loop
> t<-1:10
>  for(i in 1:10)
> + {
> + k[i]<-d[(d[,(i+1)]%in%1),1]
> + p[i]<-d[(d[,(i+1)]%in%2),1]
> + t[i]<-t.test(k[i],p[i])$p.value
> + }
> Error in t.test.default(k[i], p[i]) : not enough 'x' observations
> In addition: Warning messages:
> 1: number of items to replace is not a multiple of replacement length
> 2: number of items to replace is not a multiple of replacement length
> 
> As you might have understood, I want to test for difference between the
> two
> cagories: "k" and "v". the second column of the data is the original
> categorization and the rest columns(3:10) are a matrix of randomized
> values
> between 1 to 3. (I have three categories)
> My purpose of doing so is to check whether significant difference comes up
> in the randomized data also. This is to check the effect of the small
> sample
> size of my data.
> Please suggest a way or an alternative to the above approach.
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at stat.math.ethz.ch 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.
> 
> 

-- 
View this message in context: http://www.nabble.com/warning-in-a-loop-tf3969850.html#a11273379
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list