Re: [R] Loop question?
The unlist-sapply-seq_len bit is unnecessarily convoluted, since the infcprodessa function can accept vector inputs. z <- infcprodessa( ab$a, TINF, ab$b, ab$b-TINF ) possibles <- ab[ z >= 15 & z <= 20, ] possibles[ which.min( possibles$a ), ] --- Jeff NewmillerThe . . Go Live... DCN:Basics: ##.#. ##.#. Live Go... Live: OO#.. Dead: OO#.. Playing Research Engineer (Solar/BatteriesO.O#. #.O#. with /Software/Embedded Controllers) .OO#. .OO#. rocks...1k --- Sent from my phone. Please excuse my brevity. Berend Hasselman wrote: > >On 26-01-2013, at 12:31, Andras Farkas wrote: > >> >> Sorry Jeff, probably the new version of Yahoo mail doing the html, I >switched back to the older one hope that takes care of the problem. Let >me clarify the code below: >> >> TINF <-1 >> a <-c(500,750,1000,1250,1500,1750,2000) >> b <-c(8,12,18,24,36,48,60,72,96) >> >> infcprodessa <-function (D, tin, tau, ts) >> (D * (1 - exp(-0.048 * tin))/(tin * (0.048*79) * (1 - exp(-0.048 >* tau * exp(-0.048 * (ts - tin)) >> >> z <-sapply(1:1, function(n) infcprodessa(a,TINF,b,b-TINF)) >> >> so I am looking to find the combination of a = 1000 and b = 12, which >iz a value for "z" that would fall between 15 and 20. Sometimes though >there may be more than one combinations that will meet criteria, in >that case I would like to select the combination based on the smallest >"a" value that has the respective "b" value to meet the criteria, >> > >ab <- expand.grid(a=a,b=b) >z <- unlist(sapply(seq_len(nrow(ab)), function(k) >infcprodessa(ab[k,1],TINF,ab[k,2],ab[k,2]-TINF))) > >z.target <- which(z>=15 & z<=20) >ab[z.target,] >z[z.target] >which.min(ab[z.target,][,"a"]) > >Berend > >__ >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.
Re: [R] Loop question?
On 26-01-2013, at 12:31, Andras Farkas wrote: > > Sorry Jeff, probably the new version of Yahoo mail doing the html, I switched > back to the older one hope that takes care of the problem. Let me clarify the > code below: > > TINF <-1 > a <-c(500,750,1000,1250,1500,1750,2000) > b <-c(8,12,18,24,36,48,60,72,96) > > infcprodessa <-function (D, tin, tau, ts) > (D * (1 - exp(-0.048 * tin))/(tin * (0.048*79) * (1 - exp(-0.048 * > tau * exp(-0.048 * (ts - tin)) > > z <-sapply(1:1, function(n) infcprodessa(a,TINF,b,b-TINF)) > > so I am looking to find the combination of a = 1000 and b = 12, which iz a > value for "z" that would fall between 15 and 20. Sometimes though there may > be more than one combinations that will meet criteria, in that case I would > like to select the combination based on the smallest "a" value that has the > respective "b" value to meet the criteria, > ab <- expand.grid(a=a,b=b) z <- unlist(sapply(seq_len(nrow(ab)), function(k) infcprodessa(ab[k,1],TINF,ab[k,2],ab[k,2]-TINF))) z.target <- which(z>=15 & z<=20) ab[z.target,] z[z.target] which.min(ab[z.target,][,"a"]) Berend __ 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.
Re: [R] Loop question?
Sorry Jeff, probably the new version of Yahoo mail doing the html, I switched back to the older one hope that takes care of the problem. Let me clarify the code below: TINF <-1 a <-c(500,750,1000,1250,1500,1750,2000) b <-c(8,12,18,24,36,48,60,72,96) infcprodessa <-function (D, tin, tau, ts) (D * (1 - exp(-0.048 * tin))/(tin * (0.048*79) * (1 - exp(-0.048 * tau * exp(-0.048 * (ts - tin)) z <-sapply(1:1, function(n) infcprodessa(a,TINF,b,b-TINF)) so I am looking to find the combination of a = 1000 and b = 12, which iz a value for "z" that would fall between 15 and 20. Sometimes though there may be more than one combinations that will meet criteria, in that case I would like to select the combination based on the smallest "a" value that has the respective "b" value to meet the criteria, sorry for the confusion, thanks, Andras --- On Sat, 1/26/13, Jeff Newmiller wrote: > From: Jeff Newmiller > Subject: Re: [R] Loop question? > To: "Andras Farkas" , "r-help@r-project.org" > > Date: Saturday, January 26, 2013, 2:09 AM > Please read the Posting Guide > no html email > reproducible example please > > In general, you can use expand.grid to generate all > combinations of inputs, compute results as a vector just as > long as the expand.grid data frame has rows, and identify > which results meet your criteria by a logical test, and use > that test to identify which input combinations worked. > Provide a working starting point and someone might give you > working code as an answer. (where do a and b come into your > problem?) > --- > Jeff Newmiller > The > . > . Go Live... > DCN: > Basics: ##.#. > ##.#. Live Go... > > > Live: OO#.. Dead: > OO#.. Playing > Research Engineer (Solar/Batteries > O.O#. > #.O#. with > /Software/Embedded Controllers) > .OO#. > .OO#. rocks...1k > --- > > Sent from my phone. Please excuse my brevity. > > Andras Farkas > wrote: > > >Dear All > >� > >I have the following data (somewhat simplyfied): > >� > >TINF <-1 > >a <-c(500,750,1000,1250,1500,1750,2000) > >b <-c(8,12,18,24,36,48,60,72,96) > >� > >following function: > >� > >infcprodessa <-function (D, tin, tau, ts) > >� (D * (1 - exp(-0.048 * tin))/(tin * (0.048*79) * (1 > - exp(-0.048 * > >tau * exp(-0.048 * (ts - tin)) > > > >z <-sapply(1:1, function(n) > infcprodessa(1000,TINF,12,12-TINF)) > >� > >is there a way to select the combination of respective a > and b values > >that would result in a calculated z that is between 15 > and 20? In this > >case the a would be 1000 and the b would be 12 (other > combinations are > >also possible), but how could I automatically find them? > perhaps a > >loop? > >� > >Apreciate the help, > >� > >Sincerely, > >� > >Andras > > [[alternative HTML version deleted]] > > > > > > > > > > > >__ > >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.
Re: [R] Loop question?
Here's a toy example which you can apply the logic of: dfr <- expand.grid(1:3,1:2) results <- apply(dfr, 1, sum) dfr[results==4,] On 25 January 2013 22:19, Andras Farkas wrote: > > Dear All > > I have the following data (somewhat simplyfied): > > TINF <-1 > a <-c(500,750,1000,1250,1500,1750,2000) > b <-c(8,12,18,24,36,48,60,72,96) > > following function: > > infcprodessa <-function (D, tin, tau, ts) > (D * (1 - exp(-0.048 * tin))/(tin * (0.048*79) * (1 - exp(-0.048 * tau > * exp(-0.048 * (ts - tin)) > > z <-sapply(1:1, function(n) infcprodessa(1000,TINF,12,12-TINF)) > > is there a way to select the combination of respective a and b values that > would result in a calculated z that is between 15 and 20? In this case the a > would be 1000 and the b would be 12 (other combinations are also possible), > but how could I automatically find them? perhaps a loop? > > Apreciate the help, > > Sincerely, > > Andras > [[alternative HTML version deleted]] > > > __ > 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.
Re: [R] Loop question?
Please read the Posting Guide no html email reproducible example please In general, you can use expand.grid to generate all combinations of inputs, compute results as a vector just as long as the expand.grid data frame has rows, and identify which results meet your criteria by a logical test, and use that test to identify which input combinations worked. Provide a working starting point and someone might give you working code as an answer. (where do a and b come into your problem?) --- Jeff NewmillerThe . . Go Live... DCN:Basics: ##.#. ##.#. Live Go... Live: OO#.. Dead: OO#.. Playing Research Engineer (Solar/BatteriesO.O#. #.O#. with /Software/Embedded Controllers) .OO#. .OO#. rocks...1k --- Sent from my phone. Please excuse my brevity. Andras Farkas wrote: >Dear All >� >I have the following data (somewhat simplyfied): >� >TINF <-1 >a <-c(500,750,1000,1250,1500,1750,2000) >b <-c(8,12,18,24,36,48,60,72,96) >� >following function: >� >infcprodessa <-function (D, tin, tau, ts) >� (D * (1 - exp(-0.048 * tin))/(tin * (0.048*79) * (1 - exp(-0.048 * >tau * exp(-0.048 * (ts - tin)) > >z <-sapply(1:1, function(n) infcprodessa(1000,TINF,12,12-TINF)) >� >is there a way to select the combination of respective a and b values >that would result in a calculated z that is between 15 and 20? In this >case the a would be 1000 and the b would be 12 (other combinations are >also possible), but how could I automatically find them? perhaps a >loop? >� >Apreciate the help, >� >Sincerely, >� >Andras > [[alternative HTML version deleted]] > > > > > >__ >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.
Re: [R] Loop question
Note that in R >= 2.15 you can also use paste0 for this operation more efficiently. Michael On Thu, May 31, 2012 at 1:58 AM, Özgür Asar wrote: > Dear Sebastian, > > The following will create the names > > paste("sb",1:5,sep="") > paste("sw",1:5,sep="") > paste("Lw",1:5,sep="") > paste("Lb",1:5,sep="") > > Then you can easily combine and/or order them in R. > > Hope this helps. > Ozgur > > - > > Ozgur ASAR > > Research Assistant > Middle East Technical University > Department of Statistics > 06531, Ankara Turkey > Ph: 90-312-2105309 > http://www.stat.metu.edu.tr/people/assistants/ozgur/ > -- > View this message in context: > http://r.789695.n4.nabble.com/Loop-question-tp4631896p4631900.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. __ 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.
Re: [R] Loop question
Dear Sebastian, The following will create the names paste("sb",1:5,sep="") paste("sw",1:5,sep="") paste("Lw",1:5,sep="") paste("Lb",1:5,sep="") Then you can easily combine and/or order them in R. Hope this helps. Ozgur - Ozgur ASAR Research Assistant Middle East Technical University Department of Statistics 06531, Ankara Turkey Ph: 90-312-2105309 http://www.stat.metu.edu.tr/people/assistants/ozgur/ -- View this message in context: http://r.789695.n4.nabble.com/Loop-question-tp4631896p4631900.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.
Re: [R] loop question
Dear Thomas, On Tue, Apr 5, 2011 at 8:33 AM, Thomas wrote: > Dear all, > > I am trying to set up a list with 1:c objects each meant to capture the > coefficients for one coefficient and 100 replications. I receive the > following error message: > > Error in betaboot[[p]] : subscript out of bounds. > > My code is below. Where is my mistake? > > Many thanks, > > Thomas > > _ > betaboot<-list(NULL) if you know the number of bootstraps (which you seem to later on), a preferred way to instatiate the list would be: betaboot <- vector(mode = "list", length = yourlength) > > for (i in 1:c) { because "c()" is such an important function, I would strongly encourage you not to use it also as a variable. > betaboot[[i]]<-cbind() Don't use this to build an empty list. > } > > > num <- 100 # this is the number of bootstraps > > for (i in 1:num) { > > [BOOTSTRAP] > > coef.temp <- coef(model.temp, data=newdata) > > for (p in 1:c){ > betaboot[[p]] <- cbind(betaboot[[p]], coef.temp[,p]) This should work assuming betaboot is instatiated properly. That said, it looks like you have a nested for loop and then just keep cbind()ing each element of betaboot bigger and bigger. You may get a performance increase if you also instantiate each matrix/dataframe inside betaboot. Then the call would become something like: betaboot[[i]][,p] <- coef.temp[,p] that is, you can use a chained series of extraction operators to get to the appropriate column in the matrix/dataframe inside the appropriate list element. Then rather than constantly using cbind(), you just place coef.temp[,p] where you want it. The only requirement is that you know the sizes of the matrices/dataframes going in so you can create empty ones from the get go. Cheers, Josh > } > > } > > __ > 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. -- Joshua Wiley Ph.D. Student, Health Psychology University of California, Los Angeles http://www.joshuawiley.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.
Re: [R] Loop question
On Fri, Apr 17, 2009 at 10:12 PM, Brendan Morse wrote: > ...I would like to automatically generate a series of matrices and > give them successive names. Here is what I thought at first: > > t1<-matrix(0, nrow=250, ncol=1) > > for(i in 1:10){ > t1[i]<-rnorm(250) > } > > What I intended was that the loop would create 10 different matrices with a > single column of 250 values randomly selected from a normal distribution, > and that they would be labeled t11, t12, t13, t14 etc. Very close. But since you've started out with a *matrix* t1, your assignments to t1[i] will assign to parts of the matrix. To correct this, all you need to do is initialize t1 as a *list of matrices* or (even better) as an *empty list*, like this: t1 <- list() and then assign to *elements* of the list (using [[ ]] notation), not to *sublists* of the list (which is what [ ] notation means in R), like this: for(i in 1:10){ t1[[i]] <- rnorm(250) } Is that what you had in mind? -s __ 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.
Re: [R] Loop question
Brendan, Matrix is atomic. Once you define t1 in matrix, t1[1]=0 rather than the whole column. I would just convert t1 to a data frame, which is a special list, by adding t1<- data.frame(t1). Now t1[1] represents the whole column. Then you can use your loop to add more columns. Jun On Fri, Apr 17, 2009 at 9:12 PM, Brendan Morse wrote: > Hi everyone, I am trying to accomplish a small task that is giving me quite > a headache. I would like to automatically generate a series of matrices and > give them successive names. Here is what I thought at first: > > t1<-matrix(0, nrow=250, ncol=1) > > for(i in 1:10){ >t1[i]<-rnorm(250) > } > > What I intended was that the loop would create 10 different matrices with a > single column of 250 values randomly selected from a normal distribution, > and that they would be labeled t11, t12, t13, t14 etc. > > Can anyone steer me in the right direction with this one? > > Thanks! > Brendan > > __ > 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. > -- Jun Shen PhD PK/PD Scientist BioPharma Services Millipore Corporation 15 Research Park Dr. St Charles, MO 63304 Direct: 636-720-1589 [[alternative HTML version deleted]] __ 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.
Re: [R] Loop question
Brendan Morse wrote: > > Hi everyone, I am trying to accomplish a small task that is giving me > quite a headache. I would like to automatically generate a series of > matrices and give them successive names. Here is what I thought at > first: > > t1<-matrix(0, nrow=250, ncol=1) > > for(i in 1:10){ > t1[i]<-rnorm(250) > } > > What I intended was that the loop would create 10 different matrices > with a single column of 250 values randomly selected from a normal > distribution, and that they would be labeled t11, t12, t13, t14 etc. > I think you're basically looking for http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I-turn-a-string-into-a-variable_003f or http://wiki.r-project.org/rwiki/doku.php?id=tips:data-misc:create_var_names but see the comments in both places that indicate why it may be easier to do this as a list. for(i in 1:10){ assign(paste("t1",i,sep=""),matrix(rnorm(250))) } -- View this message in context: http://www.nabble.com/Loop-question-tp23108752p23108788.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.
Re: [R] Loop question
Dear Brendan, One way could be either bigt <- sapply(1:10,function(x) rnorm(250)) colnames(bigt) <- paste('t',1:10,sep="") bigt or bigt2 <- NULL for(i in 1:10) bigt2 <- cbind( bigt2, rnorm(250) ) colnames(bigt2) <- paste('t',1:10,sep="") bigt2 or bigt3 <- matrix(rnorm(250*10),ncol=10) colnames(bigt3) <- paste('t',1:10,sep="") bigt3 HTH, Jorge On Fri, Apr 17, 2009 at 10:12 PM, Brendan Morse wrote: > Hi everyone, I am trying to accomplish a small task that is giving me quite > a headache. I would like to automatically generate a series of matrices and > give them successive names. Here is what I thought at first: > > t1<-matrix(0, nrow=250, ncol=1) > > for(i in 1:10){ >t1[i]<-rnorm(250) > } > > What I intended was that the loop would create 10 different matrices with a > single column of 250 values randomly selected from a normal distribution, > and that they would be labeled t11, t12, t13, t14 etc. > > Can anyone steer me in the right direction with this one? > > Thanks! > Brendan > > __ > 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. > [[alternative HTML version deleted]] __ 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.