All, In the function below I have 24 individuals and 6 calculations per individual. The 6 calculations are collected each time in a 1:24 loop when calculating "delta". I'd like to collect all 144 = 24*6 calculations in one vector ("delta.patient.comb"). The function works as is via indexing, but is there an easier way to collect the measurements via appendinng the 6 measurements each time to the current set? I couldn't find anything in Intro to R on appending. cheers, Dave ps - please respond directly to afshar at miami.edu creatine.function.new = function(delta.0.Y.0, gamma, comp.LIS.frm, comp.CAND.frm) { ## function to calcuate the delta.i, i.e. the percent ## leftover ## gamma = rate of Cr going into bucket, e.g., mg/hr ## delta.0.Y.0 = product of delta.0 and Y.0 at baseline ## Y.1 = delta.0.Y.0 + gamma delta = numeric(6) delta.patient = numeric(24) delta.patient.comb = numeric(144) ## for (k in 1:24) { ## each patient patient.k.CAND = which(comp.CAND.frm$Patient_no == k) Ucr.CAND.patient.k = comp.CAND.frm$Ucr[patient.k.CAND] C = Ucr.CAND.patient.k ## 6 observed creatanine values for each patient delta[1] = (Y.1 - C[1])/Y.1 Y.i = Y.1 delta.i = delta[1] for (i in 1:5) { ## six measurments per patient Y.i.plus.1 = delta.i * Y.i + gamma delta.i.plus.1 = (Y.i.plus.1 - C[i+1])/Y.i.plus.1 delta[i+1] = delta.i.plus.1 delta.i = delta[i+1] Y.i = Y.i.plus.1 } delta.patient[k] = list(delta) delta.patient.comb[(6*(k-1)+1):(6*(k-1)+ 6)] = delta } list(delta.patient, delta.patient.comb) }
Hi David, It would be helpful if you supply a little data, upon which this would operate. Hank On Jun 14, 2006, at 12:31 PM, Afshartous, David wrote:> All, > > In the function below I have 24 individuals and 6 calculations per > individual. > The 6 calculations are collected each time in a 1:24 loop when > calculating "delta". > > I'd like to collect all 144 = 24*6 calculations in one vector > ("delta.patient.comb"). > The function works as is via indexing, but is there an easier way to > collect the measurements via appendinng the 6 measurements each > time to > the current set? I couldn't find anything in Intro to R on appending. > > cheers, > Dave > ps - please respond directly to afshar at miami.edu > > > > creatine.function.new = function(delta.0.Y.0, gamma, comp.LIS.frm, > comp.CAND.frm) { ## function to calcuate the delta.i, i.e. the percent > ## leftover ## gamma = rate of Cr going into bucket, e.g., mg/hr ## > delta.0.Y.0 = product of delta.0 and Y.0 at baseline ## > Y.1 = delta.0.Y.0 + gamma > delta = numeric(6) > delta.patient = numeric(24) > delta.patient.comb = numeric(144) > ## > for (k in 1:24) { ## each patient > patient.k.CAND = which(comp.CAND.frm$Patient_no == k) > Ucr.CAND.patient.k = comp.CAND.frm$Ucr[patient.k.CAND] > C = Ucr.CAND.patient.k ## 6 observed creatanine values > for each patient > delta[1] = (Y.1 - C[1])/Y.1 > Y.i = Y.1 > delta.i = delta[1] > for (i in 1:5) { ## six measurments per > patient > Y.i.plus.1 = delta.i * Y.i + gamma > delta.i.plus.1 = (Y.i.plus.1 - > C[i+1])/Y.i.plus.1 > delta[i+1] = delta.i.plus.1 > delta.i = delta[i+1] > Y.i = Y.i.plus.1 > } > delta.patient[k] = list(delta) > delta.patient.comb[(6*(k-1)+1):(6*(k-1)+ 6)] = delta > } > list(delta.patient, delta.patient.comb) > } > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting- > guide.htmlDr. M. Hank H. Stevens, Assistant Professor 338 Pearson Hall Botany Department Miami University Oxford, OH 45056 Office: (513) 529-4206 Lab: (513) 529-4262 FAX: (513) 529-4243 http://www.cas.muohio.edu/~stevenmh/ http://www.muohio.edu/ecology/ http://www.muohio.edu/botany/ "E Pluribus Unum"
Hank, Attached is the dataframe that can be supplied for the argument comp.CAND.frm. The argument for comp.LIS.frm can be deleted since it currently isn't used. The other arguments can be set as: delta.0.Y.0 = 50 gamma = 40. cheers, dave -----Original Message----- From: Martin Henry H. Stevens [mailto:HStevens at MUOhio.edu] Sent: Wednesday, June 14, 2006 1:23 PM To: Afshartous, David Cc: r-help at stat.math.ethz.ch Subject: Re: [R] appending Hi David, It would be helpful if you supply a little data, upon which this would operate. Hank On Jun 14, 2006, at 12:31 PM, Afshartous, David wrote:> All, > > In the function below I have 24 individuals and 6 calculations per > individual. > The 6 calculations are collected each time in a 1:24 loop when > calculating "delta". > > I'd like to collect all 144 = 24*6 calculations in one vector > ("delta.patient.comb"). > The function works as is via indexing, but is there an easier way to > collect the measurements via appendinng the 6 measurements each time > to the current set? I couldn't find anything in Intro to R on > appending. > > cheers, > Dave > ps - please respond directly to afshar at miami.edu > > > > creatine.function.new = function(delta.0.Y.0, gamma, comp.LIS.frm, > comp.CAND.frm) { ## function to calcuate the delta.i, i.e. the percent> ## leftover ## gamma = rate of Cr going into bucket, e.g., mg/hr ## > delta.0.Y.0 = product of delta.0 and Y.0 at baseline ## > Y.1 = delta.0.Y.0 + gamma > delta = numeric(6) > delta.patient = numeric(24) > delta.patient.comb = numeric(144) > ## > for (k in 1:24) { ## each patient > patient.k.CAND = which(comp.CAND.frm$Patient_no == k) > Ucr.CAND.patient.k = comp.CAND.frm$Ucr[patient.k.CAND] > C = Ucr.CAND.patient.k ## 6 observed creatanine valuesfor each> patient > delta[1] = (Y.1 - C[1])/Y.1 > Y.i = Y.1 > delta.i = delta[1] > for (i in 1:5) { ## six measurments per > patient > Y.i.plus.1 = delta.i * Y.i + gamma > delta.i.plus.1 = (Y.i.plus.1 - > C[i+1])/Y.i.plus.1 > delta[i+1] = delta.i.plus.1 > delta.i = delta[i+1] > Y.i = Y.i.plus.1 > } > delta.patient[k] = list(delta) > delta.patient.comb[(6*(k-1)+1):(6*(k-1)+ 6)] = delta > } > list(delta.patient, delta.patient.comb) } > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting- > guide.htmlDr. M. Hank H. Stevens, Assistant Professor 338 Pearson Hall Botany Department Miami University Oxford, OH 45056 Office: (513) 529-4206 Lab: (513) 529-4262 FAX: (513) 529-4243 http://www.cas.muohio.edu/~stevenmh/ http://www.muohio.edu/ecology/ http://www.muohio.edu/botany/ "E Pluribus Unum"
Hi Hank, Thanks so much for looking at this. Yes, it does what I want and is much more efficient than my code. I have a couple questions, please see my inserted comments after your tapply statement and within your for loop. Also, how do you accomplish what you mentioned RE the concatation in the naming? cheers, Dave Ps - just noticed that a quick fix to my code would be to use unlist towards my original result delta.patient, then the creative indexing I used would not have been needed (but your code still more efficient). comp.CAND.frm <- read.table("comp.CAND.frm.frm", header=TRUE) names(comp.CAND.frm) <- make.names(gsub("_", ".", names (comp.CAND.frm)), unique=TRUE) # creatine.function.new.R.help = function(delta.0.Y.0=50, gamma=40, dat=comp.CAND.frm) { ## function to calcuate the delta.i, i.e. the percent ## leftover ## gamma = rate of Cr going into bucket, e.g., mg/hr ## delta.0.Y.0 = product of delta.0 and Y.0 at baseline ## unlist( tapply(dat$Ucr, dat$Patient.no, function(Cs) { ## Cs is the argument to the function defined ## for this tapply statement ## Cs will equal Ucr? n.obs <- length(Cs) Y=numeric(n.obs+1) Y[1] = delta.0.Y.0 + gamma delta = numeric(n.obs) for (i in 1:n.obs) delta[i] <- ## why delta[i] outside the {}? { d <- (Y[i] - Cs[i])/Y[i] ## why not just call this d[i]? Y[i+1] = delta[i] * Y[i] + gamma d ## the output of each iteration; set equal to d[i] each time? } delta # result of function(Cs) used in tapply } ) ) } dim(comp.CAND.frm) 6*24 creatine.function.new() ### The names are the concatenation of the patient and the observation ## e.g. patient 24 observation 6 is labeled 246. -----Original Message----- From: Martin Henry H. Stevens [mailto:HStevens at muohio.edu] Sent: Thursday, June 15, 2006 7:00 AM To: Afshartous, David Cc: r-help at stat.math.ethz.ch Subject: Re: [R] appending Hi Dave, Does this do what you want? Hank comp.CAND.frm <- read.table("comp.CAND.frm.frm", header=TRUE) names(comp.CAND.frm) <- make.names(gsub("_", ".", names (comp.CAND.frm)), unique=TRUE) creatine.function.new = function(delta.0.Y.0=50, gamma=40, dat=comp.CAND.frm) { ## function to calcuate the delta.i, i.e. the percent ## leftover ## gamma = rate of Cr going into bucket, e.g., mg/hr ## delta.0.Y.0 = product of delta.0 and Y.0 at baseline ## ## unlist( tapply(dat$Ucr, dat$Patient.no, function(Cs) { n.obs <- length(Cs) Y=numeric(n.obs+1) Y[1] = delta.0.Y.0 + gamma delta = numeric(n.obs) for (i in 1:n.obs) delta[i] <- { d <- (Y[i] - Cs[i])/Y[i] Y[i+1] = delta[i] * Y[i] + gamma d } delta} ) ) } dim(comp.CAND.frm) 6*24 creatine.function.new() ### The names are the concatenation of the patient and the observation ## e.g. patient 24 observation 6 is labeled 246. On Jun 14, 2006, at 2:35 PM, Afshartous, David wrote:> Hank, > Attached is the dataframe that can be supplied for the argument > comp.CAND.frm. The argument for comp.LIS.frm can be deleted since > it currently isn't used. The other arguments can be set as: > delta.0.Y.0 = 50 > gamma = 40. > cheers, > dave > > > > > -----Original Message----- > From: Martin Henry H. Stevens [mailto:HStevens at MUOhio.edu] > Sent: Wednesday, June 14, 2006 1:23 PM > To: Afshartous, David > Cc: r-help at stat.math.ethz.ch > Subject: Re: [R] appending > > Hi David, > It would be helpful if you supply a little data, upon which this would> operate. > Hank > On Jun 14, 2006, at 12:31 PM, Afshartous, David wrote: > >> All, >> >> In the function below I have 24 individuals and 6 calculations per >> individual. >> The 6 calculations are collected each time in a 1:24 loop when >> calculating "delta". >> >> I'd like to collect all 144 = 24*6 calculations in one vector >> ("delta.patient.comb"). >> The function works as is via indexing, but is there an easier way to >> collect the measurements via appendinng the 6 measurements each time >> to the current set? I couldn't find anything in Intro to R on >> appending. >> >> cheers, >> Dave >> ps - please respond directly to afshar at miami.edu >> >> >> >> creatine.function.new = function(delta.0.Y.0, gamma, comp.LIS.frm, >> comp.CAND.frm) { ## function to calcuate the delta.i, i.e. the >> percent > >> ## leftover ## gamma = rate of Cr going into bucket, e.g., mg/hr ## >> delta.0.Y.0 = product of delta.0 and Y.0 at baseline ## >> Y.1 = delta.0.Y.0 + gamma >> delta = numeric(6) >> delta.patient = numeric(24) >> delta.patient.comb = numeric(144) >> ## >> for (k in 1:24) { ## each patient >> patient.k.CAND = which(comp.CAND.frm$Patient_no == k) >> Ucr.CAND.patient.k = comp.CAND.frm$Ucr[patient.k.CAND] >> C = Ucr.CAND.patient.k ## 6 observed creatanine values > for each >> patient >> delta[1] = (Y.1 - C[1])/Y.1 >> Y.i = Y.1 >> delta.i = delta[1] >> for (i in 1:5) { ## six measurments per >> patient >> Y.i.plus.1 = delta.i * Y.i + gamma >> delta.i.plus.1 = (Y.i.plus.1 - >> C[i+1])/Y.i.plus.1 >> delta[i+1] = delta.i.plus.1 >> delta.i = delta[i+1] >> Y.i = Y.i.plus.1 >> } >> delta.patient[k] = list(delta) >> delta.patient.comb[(6*(k-1)+1):(6*(k-1)+ 6)] = delta >> } >> list(delta.patient, delta.patient.comb) } >> >> ______________________________________________ >> R-help at stat.math.ethz.ch mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide! http://www.R-project.org/posting- >> guide.html > > Dr. M. Hank H. Stevens, Assistant Professor > 338 Pearson Hall > Botany Department > Miami University > Oxford, OH 45056 > > Office: (513) 529-4206 > Lab: (513) 529-4262 > FAX: (513) 529-4243 > http://www.cas.muohio.edu/~stevenmh/ > http://www.muohio.edu/ecology/ > http://www.muohio.edu/botany/ > "E Pluribus Unum" > > > > > <comp.CAND.frm.frm>Dr. M. Hank H. Stevens, Assistant Professor 338 Pearson Hall Botany Department Miami University Oxford, OH 45056 Office: (513) 529-4206 Lab: (513) 529-4262 FAX: (513) 529-4243 http://www.cas.muohio.edu/~stevenmh/ http://www.muohio.edu/ecology/ http://www.muohio.edu/botany/ "E Pluribus Unum"