>From: Neil Stewart <[EMAIL PROTECTED]> >Date: 2007/12/10 Mon PM 05:41:34 CST >To: [EMAIL PROTECTED] >Subject: [R] Neat conditional assignment
d <- ifelse(a == "A",b,c) >I would like to make a new vector with values taken from two existing >vectors conditional upon a third. At present I am doing this with a for loop >but wonder if there is not a neater way, given some of the very neat things >R can do. > >a<-rep(c("A","B"),50) >b<-rep(1,100) >c<-rep(2,100) > >a is thus "A" "B" "A" "B" "A" "B"... >b is thus 1 1 1 1 1 1 ... >c is thus 2 2 2 2 2 2 ... > >I want d[i] to be b[i] if a[i]=="A" and c[i] if a[i]=="B". I'm current using >a for loop: > >d<-rep(0,100) # initialise d >for(i in 1:length(a)) {if(a[i]=="A") d[i]<-b[i] else d[i]<-c[i]} > >d is thus 1 2 1 2 1 2 1 2 1 ... > >Is it possible to do something simpler, say along the lines of the c-style >?: conditional statement, or at least avoiding the for loop. > >d <- a=="A"?b:c # doesn't work, but you get the idea > >Thanks in advance, >Neil > >______________________________________________ >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. ______________________________________________ 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.