Yes indeed. My mistake.

On Fri, Nov 18, 2011 at 4:45 PM, Joris Meys <jorism...@gmail.com> wrote:

> Because if you calculate the probability and then make uniform values,
> nothing guarantees that the sum of those uniform values actually is
> larger than 50,000. You only have 50% chance it is, in fact...
> Cheers
> Joris
>
> On Fri, Nov 18, 2011 at 4:08 PM, Karl Forner <karl.for...@gmail.com>
> wrote:
> > Hi,
> >
> > A probably very naive remark, but I believe that the probability of sum(
> > runif(10000) ) >= 50000 is exactly 0.5. So why not just test that, and
> > generate the uniform values only if needed ?
> >
> >
> > Karl Forner
> >
> > On Thu, Nov 17, 2011 at 6:09 PM, Raymond <gw...@mail.missouri.edu>
> wrote:
> >
> >> Hi R developers,
> >>
> >>    I am new to this forum and hope someone can help me with .Call in R.
> >> Greatly appreciate any help!
> >>
> >>    Say, I have a vector called "vecA" of length 10000, I generate a
> vector
> >> called "vecR" with elements randomly generated from Uniform[0,1]. Both
> vecA
> >> and vecR are of double type. I want to replace elements vecA by
> elements in
> >> vecR only if sum of elements in vecR is greater than or equal to 5000.
> >> Otherwise, vecR remain unchanged. This is easy to do in R, which reads
> >>    vecA<-something;
> >>    vecR<-runif(10000);
> >>    if (sum(vecR)>=5000)){
> >>       vecA<-vecR;
> >>    }
> >>
> >>
> >>    Now my question is, if I am going to do the same thing in R using
> .Call.
> >> How can I achieve it in a more efficient way (i.e. less computation time
> >> compared with pure R code above.).  My c code (called "change_vecA.c")
> >> using
> >> .Call is like this:
> >>
> >>    SEXP change_vecA(SEXP vecA){
> >>         int i,vecA_len;
> >>         double sum,*res_ptr,*vecR_ptr,*vecA_ptr;
> >>
> >>         vecA_ptr=REAL(vecA);
> >>         vecA_len=length(vecA);
> >>         SEXP res_vec,vecR;
> >>
> >>         PROTECT(res_vec=allocVector(REALSXP, vec_len));
> >>         PROTECT(vecR=allocVector(REALSXP, vec_len));
> >>         res_ptr=REAL(res_vec);
> >>         vecR_ptr=REAL(vecR);
> >>         GetRNGstate();
> >>         sum=0.0;
> >>         for (i=0;i<vecA_len;i++){
> >>              vecR_ptr[i]=runif(0,1);
> >>              sum+=vecR_ptr[i];
> >>         }
> >>         if (sum>=5000){
> >>            /*copy vecR to the vector to be returned*/
> >>            for (i=0;i<vecA_len;i++){
> >>                  res_ptr[i]=vecR_ptr[i];
> >>            }
> >>         }
> >>         else{
> >>                /*copy vecA to the vector to be returned*/
> >>                for (i=0;i<vecA_len;i++){
> >>                      res_ptr[i]=vecA_ptr[i];
> >>                }
> >>         }
> >>
> >>         PutRNGstate();
> >>         UNPROTECT(2);
> >>         resturn(res);
> >> }
> >> My R wrapper function is
> >>        change_vecA<-function(vecA){
> >>              dyn.load("change_vecA.so");
> >>              .Call("change_vecA",vecA);
> >>        }
> >>
> >>         Now my question is, due to two loops (one generates the random
> >> vector and one determines the vector to be returned), can .Call still be
> >> faster than pure R code (only one loop to copy vecR to vecA given
> condition
> >> is met)? Or, how can I improve my c code to avoid redundant loops if
> any.
> >> My
> >> concern is if vecA is large (say of length 1000000 or even bigger),
> loops
> >> in
> >> C code can slow things down.  Thanks for any help!
> >>
> >>
> >>
> >>
> >>
> >> --
> >> View this message in context:
> >> http://r.789695.n4.nabble.com/Call-in-R-tp4080721p4080721.html
> >> Sent from the R devel mailing list archive at Nabble.com.
> >>
> >> ______________________________________________
> >> R-devel@r-project.org mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-devel
> >>
> >
> >        [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-devel@r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
> >
>
>
>
> --
> Joris Meys
> Statistical consultant
>
> Ghent University
> Faculty of Bioscience Engineering
> Department of Mathematical Modelling, Statistics and Bio-Informatics
>
> tel : +32 9 264 59 87
> joris.m...@ugent.be
> -------------------------------
> Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php
>

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to