From edd @ending from debi@n@org  Fri Sep 21 16:20:00 2018
From: edd @ending from debi@n@org (Dirk Eddelbuettel)
Date: Fri, 21 Sep 2018 09:20:00 -0500
Subject: [Rd] Bias in R's random integers?
In-Reply-To: <5268718.ryNPvsxLyr@x2>
References: <CAN_1p9wVX=AR8aYtC2LJo0bgN9cRW3XcbYJqnVHdCzA-QA1ceg@mail.gmail.com>
 <a590bfc6-f172-b227-00d9-9eacb126fd63@gmail.com>
 <2357485.GhJh1lojO1@x2> <5268718.ryNPvsxLyr@x2>
Message-ID: <23460.65040.561425.838748@rob.eddelbuettel.com>


On 21 September 2018 at 09:50, Steve Grubb wrote:
| Hello,
| 
| Top posting. Several people have asked about the code to replicate my 
| results. I have cleaned up the code to remove an x/y coordinate bias for 
| displaying the results directly on a 640 x 480 VGA adapter. You can find the 
| code here:
| 
| http://people.redhat.com/sgrubb/files/vseq.c
| 
| To collect R samples:
| X <- runif(10000, min = 0, max = 65535)
| write.table(X, file = "~/r-rand.txt", sep = "\n", row.names = FALSE)
| 
| Then:
| cat ~/r-rand.txt | ./vseq > ~/r-rand.csv
| 
| And then to create the chart:
| 
| library(ggplot2);
| num.csv <- read.csv("~/random.csv", header=T)
| qplot(X, Y, data=num.csv);
| 
| Hope this helps sort this out.

Here is a simpler version in one file, combining the operations in a bit of
C++ and also an auto-executed piece of R to create the data, call the
transformation you created, and plot.  Store as eg /tmp/stevegrubb.cpp
and then call   Rcpp::sourceCpp("/tmp/stevegrubb.cpp")

Dirk

--- snip --------------------------------------------------------------------
#include <Rcpp.h>

#define SCALING 0.5

// [[Rcpp::export]]
Rcpp::NumericMatrix stevePlot(Rcpp::NumericVector itable) {
  size_t cnt = itable.size();
  Rcpp::NumericMatrix M(cnt,2);
  size_t num = 0;
  double nth, n1th = 0, n2th = 0, n3th = 0;
  double x, y;
  double usex, usey, pha = 0;

  
  usex = sin(pha);
  usey = cos(pha);
  while (num < cnt) {
    double x1, y1, z1;
    nth = itable[num];
    x1 = (nth - n1th)  * SCALING;
    y1 = (n1th - n2th) * SCALING;
    z1 = (n2th - n3th) * SCALING;
    x = (x1*usey+z1*usex);
    y = y1 + (z1*usey-x1*usex) / 2;
    if (num > 4) {
      M(num,0) = x;
      M(num,1) = y;
    } else {
      M(num,0) = M(num,1) = NA_REAL;
    }
    num++;
    n3th=n2th; n2th=n1th; n1th=nth;
  }
  Rcpp::colnames(M) = Rcpp::CharacterVector::create("X", "Y");
  return(M);
}

/*** R
library(ggplot2);
Xin <- runif(10000, min = 0, max = 65535)
Xout <- stevePlot(Xin);
qplot(X, Y, data=as.data.frame(Xout));
*/
--- snip --------------------------------------------------------------------


-- 
http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org



[Rd] Bias in R's random integers?
Dirk Eddelbuettel