I'm trying to build on Jim's approach to change the parameters in the function, with new rules:
1. if (x[i]>0) log(x[i]/(number of consecutive zeros immediately preceding it +1)) 2. if (x[i]==0) NA x<-c(1,0,1,0,0,1,0,0,0,1,0,0,0,0,1) # i.e. output desired = c(0, NA, -0.69, NA, NA, -1.098, NA, NA, NA, -1.38, NA, NA, NA, NA, -1.61) # attempting to modify Jim's function...: y <- rle(x) result <- lapply(seq_along(y$lengths), function(.indx){ if (y$values[.indx-1] == 0) log(y$values[.indx]/seq(y$lengths[.indx-1]+1, by=-1, length=y$lengths[.indx])) else rep(log(y$values[.indx]), y$lengths[.indx]) }) #...I am clearly missing something! Does it not work because I haven't addressed what to do with the zeros and log(0)=-Inf? I've tried adding another "ifelse" but I still get the same result. Can someone find the error in my ways? Tyler jholtman wrote: > > Does this do what you want: > >> x<-c(0,1,0,0,1,0,0,0,1,0,0,0,0,1) >> y <- rle(x) >> result <- lapply(seq_along(y$lengths), function(.indx){ > + if (y$values[.indx] == 0) > log(y$values[.indx+1]/seq(y$lengths[.indx]+1, by=-1, > length=y$lengths[.indx])) > + else rep(log(y$values[.indx]), y$lengths[.indx]) > + }) >> unlist(result) > [1] -0.6931472 0.0000000 -1.0986123 -0.6931472 0.0000000 -1.3862944 > -1.0986123 -0.6931472 0.0000000 > [10] -1.6094379 -1.3862944 -1.0986123 -0.6931472 0.0000000 >> >> > > > On Tue, May 27, 2008 at 8:04 PM, T.D.Rudolph <[EMAIL PROTECTED]> > wrote: > >> >> In fact x[4,2] should = log(x[5,1]/2] >> whereas x[3,2] = log(x[5,1/3]) >> >> i.e. The denominator in the log function equals the number of rows >> between >> m==0 and m>0 (inclusive, hence the "+1") >> >> Hope this helps!... >> >> >> Charles C. Berry wrote: >> > >> > On Tue, 27 May 2008, T.D.Rudolph wrote: >> > >> >> >> >> >> >> I have a matrix of frequency counts from 0-160. >> >> x<-as.matrix(c(0,1,0,0,1,0,0,0,1,0,0,0,0,1)) >> >> >> >> I would like to apply a function creating a new column >> (x[,2])containing >> >> values equal to: >> >> a) log(x[m,1]) if x[m,1] > 0; and >> >> b) for all x[m,1]= 0, log(next x[m,1] > 0 / count of preceding zero >> >> values >> >> +1) >> >> >> >> for example, x[1,2] should equal log(x[2,1]/2) = log(1/2) = -0.6931472 >> >> whereas x[3,2] should equal log(x[5,1]/3) = log (1/3) = -1.098612 >> >> >> > >> > If you also intend that x[4,2] == x[3,2] in your example, then this >> seems >> > what you want: >> > >> >> rle.x <- rle(x[,1]) >> >> num <- ifelse(rle.x$values == 0, c(tail(rle.x$values,-1),NA), >> >> rle.x$values ) >> >> denom <- ifelse(rle.x$values == 0 , rle.x$lengths +1 , 1 ) >> >> rep(log(num/denom),rle.x$lengths) >> > [1] -0.6931472 0.0000000 -1.0986123 -1.0986123 0.0000000 -1.3862944 >> > -1.3862944 -1.3862944 0.0000000 -1.6094379 >> > [11] -1.6094379 -1.6094379 -1.6094379 0.0000000 >> >> >> > >> > See >> > >> > ?rep >> > ?rle >> > ?tail >> > >> > HTH, >> > >> > Chuck >> > >> > >> >> I will be applying this to nrow(x)=~70,000 so I would prefer to not do >> it >> >> by >> >> hand! >> >> Tyler >> >> >> >> >> >> >> >> -- >> >> View this message in context: >> >> >> http://www.nabble.com/help-with-simple-function-tp17498394p17498394.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<http://www.r-project.org/posting-guide.html> >> >> and provide commented, minimal, self-contained, reproducible code. >> >> >> > >> > Charles C. Berry (858) 534-2098 >> > Dept of Family/Preventive >> > Medicine >> > E mailto:[EMAIL PROTECTED] UC San Diego >> > http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego >> 92093-0901 >> > >> > ______________________________________________ >> > 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<http://www.r-project.org/posting-guide.html> >> > and provide commented, minimal, self-contained, reproducible code. >> > >> > >> >> -- >> View this message in context: >> http://www.nabble.com/help-with-simple-function-tp17498394p17502735.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<http://www.r-project.org/posting-guide.html> >> and provide commented, minimal, self-contained, reproducible code. >> > > > > -- > Jim Holtman > Cincinnati, OH > +1 513 646 9390 > > What is the problem you are trying to solve? > > [[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. > > -- View this message in context: http://www.nabble.com/help-with-simple-function-tp17498394p17548555.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.