if clause in data frame
On Mar 29, 2013, at 1:48 PM, arun wrote:
Yes, that is better. I just copied the same function that the OP used. A.K.
________________________________
From: David Winsemius <dwinsemius at comcast.net>
To: arun <smartpink111 at yahoo.com>
Cc: Joanna Zhang <zjoanna2013 at gmail.com>; R help <r-help at r-project.org>
Sent: Friday, March 29, 2013 4:46 PM
Subject: Re: [R] if clause in data frame
On Mar 29, 2013, at 10:47 AM, arun wrote:
Hi,
final<-data.frame()
for (m1 in 4:10) {
for (n1 in 4:10){
for (x1 in 0: m1) {
for (y1 in 0: n1) {
final<- rbind(final,c(m1,n1,x1,y1))
res}}}}
final1<-within(final,{flag<-ifelse(x1/m1>y1/n1, 1,0)})
That looks likely to be extremely slow. 'rbind.data.frame' is notoriously slow when applied iteratively in loops.
Couldn't this just be:
dat <- expand.grid(m1 = 4:10, n1 = 4:10, x1 = 0: m1, y1 = 0: n1)
final= within(dat, flag=as.numeric( x1/m1>y1/n1) )
This may be one of those instances where "=" is not an acceptable replacement for "<-". I get an error with that code whereas I get the desired result with:
final= within(dat, flag <- as.numeric( x1/m1>y1/n1) )
-- David.
head(final1) # m1 n1 x1 y1 flag #1 4 4 0 0 0 #2 4 4 0 1 0 #3 4 4 0 2 0 #4 4 4 0 3 0 #5 4 4 0 4 0 #6 4 4 1 0 1 Also, just by looking at your code, you have "flag" and "flap". A.K.
________________________________
From: Joanna Zhang <zjoanna2013 at gmail.com>
To: arun <smartpink111 at yahoo.com>
Sent: Friday, March 29, 2013 10:56 AM
Subject: if clause in data frame
Why the if clause code not working here?
final<-data.frame()
for (m1 in 4:10) {
for (n1 in 4:10){
for (x1 in 0: m1) {
for (y1 in 0: n1) {
if (x1/m1>y1/n1) { flag<-1}
else {flap<-0}
final<-rbind(final, c(m1,n1,flag, x1,y1))
}}
}}
colnames(final)<-c("m1","n1","flag","x1","y1")
final
David Winsemius Alameda, CA, USA