On Tue, Jul 19, 2011 at 5:20 PM, Dimitri Liakhovitski <dimitri.liakhovit...@gmail.com> wrote: > Thanks a lot, Sarah. > I assume, if the values against which I am comparing are REALLY zero > ("0") - then even the first one (mean(testvec[testvec != 0])) should > work, right? > Dimitri
Well, yes. But what's "really" zero? > ((.2 + .1) - .3) == 0 [1] FALSE > all.equal(((.2 + .1) - .3), 0) [1] TRUE "0" is a string, and string comparison is a different issue, not subject to machine precision. Sarah > On Tue, Jul 19, 2011 at 4:56 PM, Sarah Goslee <sarah.gos...@gmail.com> wrote: >> In the more general case, that approach is prone to machine precision >> error (FAQ 7.31). >> >> Here's a clunky but safer alternative: >> >>> set.seed(1234) >>> testvec <- sample(0:10, 100, replace=TRUE) >>> mean(testvec) >> [1] 4.31 >>> mean(testvec[testvec != 0]) >> [1] 4.842697 >>> mean(testvec[!sapply(testvec, function(x)isTRUE(all.equal(x, 0)))]) >> [1] 4.842697 >>> >> >> (Is there an elementwise equivalent to all.equal() that I'm missing?) >> >> Sarah >> On Tue, Jul 19, 2011 at 4:48 PM, Weidong Gu <anopheles...@gmail.com> wrote: >>> You can do it by subsetting or indexing >>> >>> r<-c(0,0,0,rnorm(10,10,5)) >>>> mean(r) >>> [1] 8.052215 >>>> mean(r[r!=0]) >>> [1] 10.46788 >>> >>> Weidong Gu >>> >>> On Tue, Jul 19, 2011 at 4:36 PM, Dimitri Liakhovitski >>> <dimitri.liakhovit...@gmail.com> wrote: >>>> Sorry if it's been discussed before - don't seem to find it. >>>> I'd like to calculate a mean while ignoring zeros. >>>> "mean" doesn't seem to have an option for that. >>>> Any other function/package that could do it? >>>> >>>> Thanks for a pointer! >>> -- Sarah Goslee http://www.functionaldiversity.org ______________________________________________ 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.