[R] Subscript out of bounds- (my) problem with expansion of expression?
Jan_Svatos@eurotel.cz
Jan_Svatos at eurotel.cz
Fri Apr 6 10:41:04 CEST 2001
Hi,
I have this problem (R 1.2.2 on Pentium, OS WinNT4 SP6) :
mytable
is a 3D (n*p*2) table of non-negative "integers".
There is a need to do n times
chisq.test (rbind(mytable[i,,1], mytable[i,,2])) #on p*2 tables
Columns with zero value in the first row should be omitted, for example
chisq.test (rbind(mytable[i,-c(3,4,6),1], mytable[i,-c(3,4,6),2])) #for
i-th table with zero values at [1,3] , [1,4]and [1,6]
First row,
>mytable[1,,1]
1 2 3 4 5 6 7 8
187 95 0 0 6 0 60 88
Second row,
>mytable[1,,2]
1 2 3 4 5 6 7 8
146 50 0 2 11 0 36 109
My question is: Why the upper call of chisq.test works,
but application of function (described below) generating the "-c(3,4,6)"
string automatically from the table does not?
A function generating logical vector indicating non-zero values in a vector
"vec1"
pom1 <- function(vec1)
{
po1 <-(vec1)>0
po1
}
>pom1(mytable[1, ,1])
1 2 3 4 5 6 7 8
TRUE TRUE NA NA TRUE NA TRUE TRUE
A function "generator" with argument of logical vector "vec" indicating
non-presence of zeros is defined, which returns desired string:
generator <- function(vec)
{
tempor <- NULL
for(j in 1:length(vec))
{
if (!vec[j]) tempor<-c(tempor, j)
}
generat <- paste (tempor, collapse=",")
generat <- paste ("-c(",generat,")" , sep="")
generat
}
> generator(pom1(mytable[1, ,1]))
[1] "-c(3,4,6)"
or
>pom <- pom1(mytable[1, ,1])
> generator(pom)
[1] "-c(3,4,6)"
Then the "generator" is applied inside chisq.test:
for (i in 1:length(mytable[,1,1]))
{
pom <- pom1(mytable[i,,1])
mychi2[i]<-chisq.test(rbind(mytable[i,generator(pom),1],
mytable[i,generator(pom),2]))$p.value
}
(or just for mytable[,1,1]).
and as a result, an "Error: subscript out of bounds" is given immediately.
Why?
Neither the use of noquote(generator(pom)) instead of generator(pom) does
help, nor eval(generator(pom)).
Therefore: How could I "force" R to think of generator(pom) as of -c(3,4,6)
(or something similar)
inside the call of chisq.test (or, of course, another function)?
I think this should be (easily) possible, but I don't know how.
Thank you for any help,
Jan
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
More information about the R-help
mailing list