I accidentally posted the wrong version of my code, omitting the Q1 loop,
and, sure enough that loop generates non-integers:

qfracseq <- seq(from = 1, to = 0, by = -.1)
Q <- 10
Qseq <- Q*qfracseq

> Qseq [1] 10.00000000000000000  9.00000000000000000  8.00000000000000000  
> 7.00000000000000000
 [5]  6.00000000000000000  5.00000000000000000  3.99999999999999911
2.99999999999999911
 [9]  1.99999999999999956  0.99999999999999978  0.00000000000000000


-----

I'm a tad puzzled by why my code would do this; is this a result of some
base-10 fractions not representing as cleanly in base-2 as in -10?

At any rate, I would have never thought to check this, thanks much,

Shayne

On Thu, Sep 6, 2012 at 11:57 AM, William Dunlap <wdun...@tibco.com> wrote:

> Your Q1 may be a tad below 3.  When printed it is, by default, rounded
> to 7 significant digits.  E.g.,
>   > 3 - 3*10^-16
>   [1] 3
>   > options(digits=17)
>   > 3 - 3*10^-16
>   [1] 2.9999999999999996
> choose will truncate, not round, its inputs to make integers out of them
> so your 3 - 3*10^-16 is treated as 2.
>   > choose(3, 0:3)
>   [1] 1 3 3 1
>   > choose(3-3*10^-16, 0:3)
>   [1] 1 3 3 0
>   > choose(2, 0:3)
>   [1] 1 2 1 0
>
> Try using Q1 <- round(Q1) before calling choose.
>
> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com
>
>
> > -----Original Message-----
> > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org]
> On Behalf
> > Of Shayne Hodge
> > Sent: Thursday, September 06, 2012 11:10 AM
> > To: r-help@r-project.org
> > Subject: [R] choose() function returning anomalous results (zero instead
> of one)
> >
> > Hello,
> >
> > (Apologies for length, wanted to get all the relevant detail in that I
> know
> > of).
> >
> > I've been having a lot of trouble with some code for an inventory
> analysis
> > problem I was doing, and finally came to the conclusion that it appears
> > that choose() is returning incorrect values. Specifically:
> >
> > -------------
> >
> > Browse[1]> nn
> > [1] 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3
> > Browse[1]> Q1
> > [1] 3
> > Browse[1]> choose(Q1,3)
> > [1] 0
> > Browse[1]> choose(Q1,nn)
> > [1] 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0
> >
> >
> > ------------------
> >
> > Browse[1]> nn
> > [1] 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3
> > Browse[1]> Q1
> > [1] 3
> > Browse[1]> choose(Q1,nn)
> > [1] 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0
> >
> > --------------
> >
> > The first was from RStudio, the second from RGui. (Windows x64, version
> > 2.14.2). (That's executed from the point of view of browser() in
> > ugly_function(), see code below). It's returning choose(3,3) as 0,
> instead
> > of 1. It does not do this consistently - I've put the simplest code I've
> > been able to use to consistently generate the problem beneath my sig.
> >
> > Something about the loop seems to generate the problem. If I remove the
> > loop over Q, and just set Q = 3, then choose(Q1,testn) (where testn is
> > equal to the nn shown above) works without a problem.
> >
> > I'm not sure if it's related, but I'm also having problems with browser()
> > not firing the first time through and/or having code continue to execute
> > before it interrupts, i.e.:
> >
> > ------
> > Browse[2]> pprime <- sum(testma)
> > Error: object 'testma' not found
> > Browse[2]>
> > Browse[2]> loopvar <- loopvar + 1
> > Browse[2]>
> > debug at #3: partial1 <- (((1 - f11) * (1 - f12))^(Qone - nn)) * ((f11 +
> (1
> > -
> >     f11) * f12)^nn)
> > Browse[2]> print(proc.time() - ptm)
> >    user  system elapsed
> >    0.33    0.11    0.59
> > -----
> >
> > Everything was generated by the program, I didn't type any of it in;
> > browser() is not in the code below, but I generally put it somewhere in
> > ugly_function() to check on choose(), but it looks like ugly finishes
> > executing and goes back to body of the program before letting me do
> > anything.
> >
> > (Commented out is my problematic solution, using R.basic's nChooseK on
> the
> > values most likely to return anomalous results. and bits of debug code).
> >
> > Shayne Hodge
> > scho...@ieee.org
> >
> > # VeridianDynamics Inventory Optimization Script
> > # Copyright 2012 Shayne Hodge
> > # Two-vendor Sensitivity Analysis
> >
> > rm(list=ls()) # Clear previous session data
> > library("R.basic")
> > ptm <- proc.time()
> >
> > ugly_function <- function(nn,k,Qone,Qtwo,f11,f12,f21,f22)
> > {
> > partial1 <- (((1-f11)*(1-f12))^(Qone-nn))*((f11+(1-f11)*f12)^nn)
> > partial2 <- (((1-f21)*(1-f22))^(Qtwo-k))* ((f21+(1-f21)*f22)^(k))
> > #ifelse ( ((Qone < 125)|((Qone-nn)<75)|(nn<75)), test1 <-
> > nChooseK(Qone,nn), test1 <- choose(Qone,nn))
> > #ifelse ( ((Qtwo < 125)|((Qtwo-k)<75)|(k<75)), test2 <- nChooseK(Qtwo,k),
> > test2 <- choose(Qtwo,k))
> > test1 <- choose(Qone,nn)
> > test2 <- choose(Qtwo,k)
> > #print(test1[test1==0])
> > ptest <- ifelse( ((partial1 == 0) | (partial2 == 0)),0,
> > test1*partial1*partial2*test2)
> > return(ptest)
> > }
> >
> > gen_nk_old <- function (k2,Q1,Q2)
> > {
> > nkmatrix <- matrix(nrow = sum(1:k2),ncol=2)
> > index <- 1
> > for (n in 0:min(Q1, k2-1)) # This corresponds to the outer sigma for P'
> > {
> > for (k in 0:min(Q2, k2-1-n)) # This is the inner sigma for P'
> > {
> > nkmatrix[index,1] <- n
> > nkmatrix[index,2] <- k
> > index <- index + 1
> > }
> > }
> > return(nkmatrix[(1:(index-1)),])
> > }
> >
> > penalty <- 5000000
> > k2 <- 10
> >
> > # [ f11 f12 f21 f22 falt v2on alton parton]
> > f <- c(0.5667, 0.8760, 0.5667, 0.7, 1, 0, 0, 1)
> >
> > ci <- 1
> > Q <- 10
> > Q1 <- 3
> > Q2 <- Q-Q1
> > loopvar <- 1
> >
> > nkmatrix <- gen_nk_old(k2,Q1,Q2)
> > testn <- nkmatrix[,1]
> > testk <- nkmatrix[,2]
> >
> > testma <- ugly_function(testn, testk, Q1, Q2, f[1],f[2],f[3],f[4])
> > pprime <- sum(testma)
> >
> > loopvar <- loopvar + 1
> >
> > print(proc.time() - ptm)
> >
> >       [[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.
>

        [[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.

Reply via email to