On 07/07/2010 5:58 PM, karena wrote:
Hi, I am a newbie of R, and playing with the "ifelse" statement.
I have the following codes:
## first,
for(i in 1:3) {
for(j in 2:4) {
cor.temp <- cor(iris.allnum[,i], iris.allnum[,j])
if(i==1 & j==2) corr.iris <- cor.temp
else corr.iris <- c(corr.iris, cor.temp)
}
}
this code is working fine.
I also tried to perform the same thing in another way with "ifelse":
for(i in 1:3) {
for(j in 2:4) {
cor.temp <- cor(iris.allnum[,i], iris.allnum[,j])
corr.iris <- ifelse(i==1 & j==2, cor.temp, c(corr.iris, cor.temp))
}
}
This is not working. Seems the value of "c(corr.iris, cor.temp)" has not
been assigned to corr.iris, even when the (i==1 & j==2) is not satisfied.
what's the problem here?
See ?ifelse. It computes something the same shape as the test object.
In your case the test is the result of
i==1 & j==2
and is a scalar that is either TRUE or FALSE, so the result of ifelse()
will be a scalar too.
To do what you want in one line, you can use
corr.iris <- if (i==1 && j==2) cor.temp else c(corr.iris, cor.temp)
but to most people this looks unnatural, and your original code is what I'd recommend using. In this
case it makes no difference whether you use & or && in the test, but in other cases only
&& makes sense with if, and only & makes sense with ifelse().
Duncan Murdoch
______________________________________________
R-help@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.