if else in R
Hi,
On Nov 19, 2013, at 9:41 PM, Nick Matzke <matzke at berkeley.edu> wrote:
Hi, This would be an issue with if() as well as if/else. ab$b has 4 numbers in it, so ab$b > 0 evaluates to "TRUE TRUE FALSE TRUE" or whatever. if() can only take a single true or false. Cheers! Nick
As a follow up, you could make a logical index for the condition as Nick suggests. a<-c(1,2,3,4) b<-c(2,0,5,0) ab<-data.frame(a,b) ix <- ab[,'b'] > 0 ix # [1] TRUE FALSE TRUE FALSE ab[ix,'c'] <- ab[ix,'a']/ab[ix,'b'] ab[!ix,'c'] <- 0 ab # a b c # 1 1 2 0.5 # 2 2 0 0.0 # 3 3 5 0.6 # 4 4 0 0.0 I'm not a big fan of the ab$b form of subsetting, I find ab[,'b'] more readable for my fading eyesight. But you could do it your way, too. ab$c[ix] <- ab$a[ix]/ab$b[ix] Cheers, Ben
On Tue, Nov 19, 2013 at 8:30 PM, Gary Dong <pdxgary163 at gmail.com> wrote:
Dear R users,
I am a R beginner and I am having trouble in using "If Else" in R. Here is
an example:
## create a data frame
a<-c(1,2,3,4)
b<-c(2,0,5,0)
ab<-data.frame(cbind(a,b))
##calculate c, which is the ratio between a and b
if(ab$b>0) {
ab$c<-ab$a/ab$b
} else {
ab$c<-0
}
here is the error I got:
Warning message:
In if (ab$b > 0) { :
the condition has length > 1 and only the first element will be used.
Any help is appreciated!
Gary
[[alternative HTML version deleted]]
______________________________________________ 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.
______________________________________________ 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.
Ben Tupper Bigelow Laboratory for Ocean Sciences 60 Bigelow Drive, P.O. Box 380 East Boothbay, Maine 04544 http://www.bigelow.org