Re: [Rd] lower.tail option in pnorm

From: William Dunlap <wdunlap_at_tibco.com>
Date: Tue, 08 Dec 2009 08:46:47 -0800

A more direct way to reproduce this is
  > pbinom(q=0:4, size=4, prob=.25, lower.tail=FALSE)   [1] 0.68359375 0.26171875 0.05078125 0.00390625 0.00000000   > pbinom(q=0:4, size=4, prob=.25, lower.tail=c(FALSE,TRUE,TRUE,TRUE))   [1] 0.68359375 0.26171875 0.05078125 0.00390625 0.00000000   > pbinom(q=0:4, size=4, prob=.25, lower.tail=c(TRUE,TRUE,TRUE,TRUE))   [1] 0.31640625 0.73828125 0.94921875 0.99609375 1.00000000 which shows that the lower.tail argument is not not vectorized. While this fact may be documented, it would be nice if functions that expected a scalar argument would complain if they got a nonscalar argument. Some do complain, as in   > seq(1, 1:4)
  [1] 1
  Warning message:
    In from:to : numerical expression has 4 elements: only the first used but lots silently take the first element of a vector when its length is more than 1, as above, and use the default value if the length is 0, as in
  > pbinom(q=0:4, size=4, prob=.25, lower.tail=logical())   [1] 0.31640625 0.73828125 0.94921875 0.99609375 1.00000000

Should the C functions Rf_asReal, Rf_asInteger, etc., warn if the argument has length more than 1? If so, they probably need another argument, a string, to put into the warning message, so the user knows which argument is causing the complaint.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com

> -----Original Message-----
> From: r-devel-bounces_at_r-project.org
> [mailto:r-devel-bounces_at_r-project.org] On Behalf Of Ken Knoblauch
> Sent: Tuesday, December 08, 2009 7:36 AM
> To: r-devel_at_r-project.org
> Subject: [Rd] lower.tail option in pnorm
>
> Hi,
>
> I would have thought that these two constructions would
> produce the same result but they do not.
>
> Resp <- rbinom(10, 1, 0.5)
> Stim <- rep(0:1, 5)
> mm <- model.matrix(~ Stim)
> Xb <- mm %*% c(0, 1)
> ifelse(Resp, log(pnorm(Xb)), log(1 - pnorm(Xb)))
> pnorm(as.vector(Xb), lower.tail = Resp, log.p = TRUE)
>
> > ifelse(Resp, log(pnorm(Xb)), log(1 - pnorm(Xb)))
> [1] -0.6931472 -1.8410216 -0.6931472 -0.1727538 -0.6931472
> [6] -0.1727538 -0.6931472 -1.8410216 -0.6931472 -1.8410216
> > pnorm(as.vector(Xb), lower.tail = Resp, log.p = TRUE)
> [1] -0.6931472 -1.8410216 -0.6931472 -1.8410216 -0.6931472
> [6] -1.8410216 -0.6931472 -1.8410216 -0.6931472 -1.8410216
>
> If I have missed something obvious, I would be grateful
> to have it pointed out.
>
> > sessionInfo()
> R version 2.10.1 beta (2009-12-04 r50668)
> i386-apple-darwin9.8.0
>
> locale:
> [1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8
>
> attached base packages:
> [1] stats graphics grDevices utils datasets methods
> [7] base
>
> loaded via a namespace (and not attached):
> [1] tools_2.10.1
>
> Thanks for any enlightenment.
>
> best,
>
> Ken
>
> --
> Ken Knoblauch
> Inserm U846
> Stem-cell and Brain Research Institute
> Department of Integrative Neurosciences
> 18 avenue du Doyen LÚpine
> 69500 Bron
> France
> tel: +33 (0)4 72 91 34 77
> fax: +33 (0)4 72 91 34 61
> portable: +33 (0)6 84 10 64 10
> http://www.sbri.fr/members/kenneth-knoblauch.html
>
> ______________________________________________
> R-devel_at_r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue 08 Dec 2009 - 16:53:12 GMT

This archive was generated by hypermail 2.2.0 : Tue 08 Dec 2009 - 21:31:02 GMT