Tena koe Natalie Does this do what you want?
set.seed(123) natalie <- matrix(NA, nrow=10^5, ncol=2, dimnames=list(NULL, paste0('flag', 1:2))) natalie[,'flag1'] <- rbinom(nrow(natalie), 1, 0.5) natalie[natalie[,'flag1']==1, 'flag2'] <- rbinom(sum(natalie[,'flag1']), 1, 0.95) natalie[natalie[,'flag1']==0, 'flag2'] <- rbinom(nrow(natalie)-sum(natalie[,'flag1']), 1, 0.5) tapply(natalie[,'flag2'], natalie[,'flag1'], table) HTH .... Peter Alspach -----Original Message----- From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On Behalf Of nqf Sent: Tuesday, 19 June 2012 5:30 a.m. To: r-help@r-project.org Subject: [R] Trying to speed up an if/else statement in simulations Dear R-help, I am trying to write a function to simulate datasets of size n which contain two time-to-event outcome variables with associated 'Event'/'Censored' indicator variables (flag1 and flag2 respectively). One of these indicator variables needs to be dependent on the other, so I am creating the first and trying to use this to create the second using an if/else statement. My data structure needs to follow this algorithm (for each row of the data): If flag1=1 then flag2 should be 1 with probability 0.95 and zero otherwise Else if flag1=0 then flag2 should be 1 with probability 0.5 and zero otherwise I can set up this example quite simply using if else statements, but this is incredibly inefficient when running thousands of datasets: data<-as.data.frame(rbinom(10,1,0.5)) colnames(data)<-'flag1' for (i in 1:n) { if (data$flag1[i]==1) {data$flag2[i]<-rbinom(1,1,0.95)} else {data$flag2[i]<-rbinom(1,1,0.5)} } I think to speed up the simulations I would be better changing to vectorisation and using something like: ifelse(data$flag1==1,rbinom(1,1,0.95),rbinom(1,1,0.5)) but the rbinom statements here generate one value and repeat this draw for every element of flag2 that matches the 'if' statement on flag1. Is there a way to assign flag2 to a new bernoulli draw for each subject in the data frame with flag1=1? I hope my question is clear, and thank you in advance for your help. Thanks, Natalie PhD student, Reading University P.S. I am using R 2.12.1 on Windows 7. -- View this message in context: http://r.789695.n4.nabble.com/Trying-to-speed-up-an-if-else-statement-in-simulations-tp4633725.html Sent from the R help mailing list archive at Nabble.com. ______________________________________________ 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. The contents of this e-mail are confidential and may be subject to legal privilege. If you are not the intended recipient you must not use, disseminate, distribute or reproduce all or any part of this e-mail or attachments. If you have received this e-mail in error, please notify the sender and delete all material pertaining to this e-mail. Any opinion or views expressed in this e-mail are those of the individual sender and may not represent those of The New Zealand Institute for Plant and Food Research Limited. ______________________________________________ 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.