Hello I'm using some R code in order to use the model BG-NBD implementation I'm using Java and I call R by using RCaller. I must admit that i'm really really new to R so maybe I'm doing something wrong. I use the code on this URL: http://code.google.com/p/clv-master-thesis/ <http://code.google.com/p/clv-master-thesis/> This is my working Java code (a simple Junit test): @Test public void testRCaller(){ try { RCaller caller = new RCaller(); caller.setRscriptExecutable("/usr/bin/Rscript"); caller.cleanRCode(); RCode code = new RCode(); code.clear(); String helper = "/dati/helper.R"; String modelNbd = "/dati/model-nbd.R"; String modelParetoNbd = "/dati/model-pareto-nbd.R"; String modelBgNbd = "/dati/model-bg-nbd.R"; String modelCbgCnbd = "/dati/model-cbg-cnbd-k.R"; code.R_source(helper); code.R_source(modelNbd); code.R_source(modelParetoNbd); code.R_source(modelBgNbd); code.R_source(modelCbgCnbd); code.addRCode("cdData <- read.table(\"/dati/cdnow.csv\", head=T)"); code.addRCode("names(cdData)[2] <- \"x\";"); code.addRCode("bgMleFit <- bgEstimateParameters(cdData, list(r=1, alpha=2, a=1, b=2));"); code.addRCode("summary(bgMleFit);"); code.addRCode("cdBgParams <- as.list(coef(bgMleFit));"); code.addRCode("t <- 39;"); code.addRCode("cdBgCe <- bgConditionalForecast(cdData, cdBgParams, t);"); code.addRCode("(cdBgSumEstimate <- sum(cdBgCe));"); code.addRCode("(cdBgMsle <- mean((log(cdData$p2x+1)-log(cdBgCe+1))^2));"); code.addRCode("(corr <- cor(cdData$p2x, cdBgCe));"); caller.setRCode(code); caller.runAndReturnResult("cdBgCe"); ROutputParser parser = caller.getParser(); ArrayList<String> nomi = parser.getNames(); for (String nome : nomi) { double[] previsioni = parser.getAsDoubleArray(nome); logger.info("Nome "+nome+" lunghezza valori "+previsioni.length); for (int i = 0; i < previsioni.length; i++) { logger.info("Valore "+ previsioni[i]); } } } catch (Exception e) { logger.error(e.getMessage(), e); } }
By running this code all works pretty good; now i didn't want to use the csv file as data source; I wanted to query DB and pass data to R As far as I know the R read.table function builds a data.frame from reading the provided csv file. So what I did is: I used Java in order to read the csv and I wrote this code (after I read the csv file and for semplicity I don't write the code related to the csv reading): @Test public void testRCaller(){ try { RCaller caller = new RCaller(); caller.setRscriptExecutable("/usr/bin/Rscript"); caller.cleanRCode(); RCode code = new RCode(); code.clear(); String helper = "/dati/helper.R"; String modelNbd = "/dati/model-nbd.R"; String modelParetoNbd = "/dati/model-pareto-nbd.R"; String modelBgNbd = "/dati/model-bg-nbd.R"; String modelCbgCnbd = "/dati/model-cbg-cnbd-k.R"; code.R_source(helper); code.R_source(modelNbd); code.R_source(modelParetoNbd); code.R_source(modelBgNbd); code.R_source(modelCbgCnbd); Map<String, Object> data = this.readCsvData(); StringBuilder userIds = new StringBuilder("ID <- c("); long[] utenti = (long[])data.get("userIds"); int[] ordini = (int[]) data.get("ordini"); double[] tx = (double[]) data.get("tx"); double[] t = (double[])data.get("t"); int[] p2x = (int[]) data.get("p2tx"); for(int i = 0; i < utenti.length; i++){ userIds.append(utenti[i]+", "); } //here i check if the stringbuilder ends with, and i clean it...checkSb is simply an utility method userIds = checkSb(userIds).append(");"); code.addIntArray("p1x", ordini); code.addDoubleArray("tx", tx); code.addDoubleArray("t", t); code.addIntArray("p2x", p2x); code.addRCode("cdData<-data.frame(ID , p1x, tx, t, p2x);"); code.addRCode("names(cdData)[2] <- \"x\";"); code.addRCode("bgMleFit <- bgEstimateParameters(cdData, list(r=1, alpha=2, a=1, b=2));"); code.addRCode("summary(bgMleFit);"); code.addRCode("cdBgParams <- as.list(coef(bgMleFit));"); code.addRCode("t <- 39;"); code.addRCode("cdBgCe <- bgConditionalForecast(cdData, cdBgParams, t);"); code.addRCode("(cdBgSumEstimate <- sum(cdBgCe));"); code.addRCode("(cdBgMsle <- mean((log(cdData$p2x+1)-log(cdBgCe+1))^2));"); code.addRCode("(corr <- cor(cdData$p2x, cdBgCe));"); caller.setRCode(code); caller.runAndReturnResult("cdBgCe"); ROutputParser parser = caller.getParser(); ArrayList<String> nomi = parser.getNames(); for (String nome : nomi) { double[] previsioni = parser.getAsDoubleArray(nome); logger.info("Nome "+nome+" lunghezza valori "+previsioni.length); for (int i = 0; i < previsioni.length; i++) { logger.info("Valore "+ previsioni[i]); } } } catch (Exception e) { logger.error(e.getMessage(), e); } } As you can see the code is totally similar to the previous one except that I don't use read.table function. Well by executing this code I have an error. At first I thought in some error in the Java code but I checked and no error was present Then I tried the code in the R console. Well I have something really strange. Let's start from this instruction (the int array is recovered from the csv file): int[] ordini = (int[]) data.get("ordini"); code.addIntArray("p1x", ordini); This Java-RCaller instruction generates this R code: p1x<-c(..........). More exactly the generated R code is the following (be ready: it's huge): p1x<-c(2, 1, 0, 0, 0, 7, 1, 0, 2, 0, 5, 0, 0, 0, 0, 0, 10, 1, 3, 0, 2, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 12, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 4, 0, 1, 0, 0, 0, 2, 0, 0, 3, 0, 0, 1, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 7, 0, 10, 0, 0, 1, 6, 0, 0, 0, 0, 0, 2, 4, 1, 5, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 4, 3, 0, 1, 2, 0, 1, 2, 0, 2, 1, 1, 0, 5, 2, 7, 2, 0, 4, 13, 0, 4, 4, 0, 0, 1, 0, 1, 29, 0, 3, 0, 0, 1, 0, 10, 0, 0, 13, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 6, 8, 0, 0, 0, 1, 0, 4, 0, 2, 3, 3, 0, 0, 0, 0, 0, 6, 0, 1, 0, 0, 2, 0, 2, 2, 0, 0, 1, 0, 1, 0, 0, 7, 0, 0, 0, 2, 0, 4, 0, 1, 1, 0, 0, 0, 0, 0, 2, 0, 1, 1, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 5, 0, 0, 2, 0, 1, 2, 0, 0, 1, 0, 1, 0, 5, 0, 0, 1, 2, 0, 1, 0, 0, 1, 2, 1, 0, 1, 0, 1, 0, 3, 1, 13, 0, 0, 0, 0, 0, 3, 3, 1, 0, 0, 3, 0, 5, 0, 2, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 3, 1, 1, 0, 1, 0, 0, 0, 4, 0, 2, 0, 3, 0, 0, 1, 0, 1, 0, 2, 0, 1, 3, 25, 0, 0, 0, 0, 5, 0, 2, 0, 0, 0, 5, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 2, 1, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 2, 4, 0, 0, 1, 3, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 11, 0, 0, 4, 0, 0, 1, 2, 0, 0, 0, 0, 1, 1, 0, 3, 1, 0, 0, 2, 0, 8, 1, 0, 2, 1, 0, 0, 1, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, 4, 0, 0, 2, 0, 6, 0, 1, 0, 1, 1, 1, 2, 1, 0, 7, 4, 0, 0, 0, 7, 0, 1, 1, 0, 2, 1, 0, 4, 0, 1, 0, 0, 2, 0, 0, 4, 0, 0, 2, 1, 0, 1, 0, 11, 0, 4, 0, 0, 0, 4, 0, 3, 0, 1, 1, 0, 0, 6, 3, 0, 0, 0, 0, 2, 0, 2, 0, 18, 0, 1, 0, 1, 0, 0, 0, 5, 0, 1, 0, 6, 0, 2, 0, 0, 2, 0, 1, 1, 0, 0, 1, 0, 1, 2, 0, 0, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 1, 10, 0, 1, 3, 3, 0, 2, 0, 0, 12, 0, 1, 2, 2, 0, 0, 0, 0, 5, 0, 0, 2, 0, 5, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 1, 7, 0, 0, 2, 0, 0, 2, 0, 4, 0, 0, 3, 0, 1, 0, 2, 2, 0, 1, 1, 2, 0, 0, 0, 0, 2, 0, 0, 1, 0, 1, 0, 3, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 2, 1, 1, 0, 0, 0, 0, 5, 1, 0, 0, 1, 2, 1, 0, 0, 0, 0, 1, 0, 8, 1, 0, 6, 1, 2, 0, 3, 6, 0, 1, 0, 2, 5, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 13, 0, 0, 1, 3, 0, 5, 0, 2, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 4, 6, 1, 2, 0, 0, 2, 0, 7, 0, 0, 0, 0, 0, 3, 0, 5, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 1, 10, 0, 0, 0, 0, 3, 3, 0, 0, 2, 5, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, 0, 0, 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 1, 0, 2, 0, 0, 7, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 1, 13, 7, 0, 0, 3, 0, 1, 0, 1, 1, 2, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 2, 1, 0, 0, 1, 19, 2, 2, 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 2, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 2, 0, 1, 1, 0, 0, 4, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 5, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 7, 2, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 1, 0, 1, 0, 1, 2, 0, 1, 0, 0, 0, 2, 0, 4, 0, 1, 7, 1, 0, 1, 0, 0, 4, 0, 1, 0, 0, 0, 0, 1, 0, 7, 1, 0, 6, 0, 5, 0, 2, 0, 1, 0, 6, 0, 2, 0, 0, 0, 2, 2, 0, 0, 6, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 1, 4, 0, 0, 1, 0, 1, 0, 0, 1, 0, 5, 2, 0, 0, 0, 3, 0, 12, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 1, 0, 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 4, 0, 0, 2, 0, 5, 0, 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 3, 0, 0, 0, 0, 11, 0, 0, 2, 0, 1, 0, 7, 0, 0, 1, 0, 3, 0, 2, 0, 1, 0, 4, 2, 2, 1, 0, 0, 0, 0, 0, 1, 3, 0, 0, 1, 1, 6, 0, 0, 4, 0, 0, 1, 0, 2, 0, 1, 3, 7, 2, 0, 5, 0, 0, 0, 0, 5, 0, 12, 1, 0, 1, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 4, 0, 1, 0, 1, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 3, 4, 1, 0, 2, 1, 2, 1, 0, 0, 2, 1, 0, 0, 0, 1, 7, 0, 6, 0, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 3, 0, 8, 0, 1, 0, 0, 2, 0, 0, 11, 0, 1, 8, 0, 1, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 3, 1, 0, 1, 6, 0, 2, 1, 1, 0, 1, 1, 0, 3, 2, 0, 0, 0, 2, 1, 1, 0, 0, 0, 0, 3, 2, 0, 3, 0, 0, 1, 4, 0, 6, 0, 1, 1, 4, 0, 2, 0, 4, 0, 0, 0, 0, 2, 0, 1, 0, 1, 2, 0, 0, 1, 0, 0, 2, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0, 0, 1, 0, 0, 0, 4, 0, 1, 3, 0, 0, 0, 0, 0, 0, 3, 1, 0, 1, 1, 2, 0, 2, 0, 0, 0, 3, 0, 1, 0, 1, 0, 9, 0, 0, 4, 0, 2, 0, 5, 0, 0, 1, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 4, 1, 0, 0, 1, 5, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 3, 0, 0, 2, 0, 14, 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 3, 0, 2, 0, 0, 1, 1, 6, 1, 6, 0, 1, 2, 0, 0, 2, 1, 0, 2, 1, 0, 1, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 5, 0, 2, 0, 1, 0, 5, 0, 1, 2, 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 3, 0, 4, 0, 1, 0, 0, 3, 1, 0, 2, 0, 2, 1, 0, 0, 0, 4, 0, 0, 0, 26, 1, 6, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 1, 2, 0, 1, 0, 0, 0, 14, 0, 1, 0, 2, 4, 0, 1, 6, 0, 0, 1, 3, 1, 0, 0, 0, 0, 1, 1, 0, 8, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 3, 0, 1, 1, 1, 1, 0, 1, 9, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2, 0, 4, 1, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 1, 0, 3, 2, 0, 2, 5, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 5, 1, 0, 1, 0, 4, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2, 4, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 1, 1, 0, 0, 3, 3, 0, 2, 0, 1, 0, 1, 0, 0, 0, 5, 1, 3, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 2, 3, 0, 0, 5, 0, 2, 0, 0, 0, 0, 0, 1, 1, 0, 0, 9, 2, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 4, 0, 4, 3, 0, 3, 2, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 3, 2, 2, 0, 0, 3, 2, 4, 0, 7, 1, 2, 0, 2, 2, 0, 3, 0, 0, 0, 1, 0, 1, 0, 0, 3, 0, 0, 1, 6, 0, 1, 0, 2, 3, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 9, 4, 2, 0, 0, 1, 4, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 5, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 7, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 15, 0, 1, 0, 2, 0, 0, 3, 0, 0, 0, 0, 1, 0, 21, 2, 0, 0, 0, 3, 0, 0, 3, 2, 1, 0, 0, 1, 1, 1, 0, 0, 1, 2, 2, 1, 0, 0, 4, 0, 0, 0, 2, 0, 0, 1, 0, 1, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 1, 0, 0, 6, 0, 11, 0, 0, 1, 1, 0, 1, 1, 2, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 17, 2, 2, 0, 2, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 1, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 0, 0, 1, 0, 0, 3, 0, 0, 2, 4, 0, 1, 0, 0, 0, 0, 2, 1, 0, 4, 2, 0, 0, 1, 3, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 1, 0, 1, 1, 3, 3, 0, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 1, 1, 0, 2, 0, 2, 0, 3, 0, 4, 0, 1, 1, 0, 0, 1, 0, 3, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0, 6, 0, 0, 0, 0, 3, 0, 0, 0, 2, 5, 0, 1, 0, 0, 1, 0, 1, 0, 0, 2, 0, 1, 2, 0, 0, 7, 0, 0, 2, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 8, 0, 0, 5, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 3, 0, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 2, 0, 0, 1, 0, 1, 2, 0, 0, 1, 0, 2, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 1, 1, 1, 0, 0, 0, 2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 4, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 6, 0, 0, 0, 0, 1, 0, 0, 2, 6, 0, 1, 0, 0, 0, 0, 2, 0, 7, 0, 1, 2, 1, 1, 1, 0, 0, 1, 5, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 5, 1, 0, 1, 2, 0, 0, 1, 2, 0, 1, 0, 2, 0, 1, 2, 7, 1, 2, 0, 0, 0, 5, 0, 4, 0); When I execute this function in the R console I have some strain behavior; sometimes it seems to not be executed some other time I have an error like "Unexpected element in......" and I really can't figure where I'm wrong... Instead if I use the "read.table function" all works pretty good. Can you give me any tips? Am I wrong anywhere? Thank you Angelo -- View this message in context: http://r.789695.n4.nabble.com/R-strange-behaviour-when-building-huge-concatenation-tp4650817.html Sent from the R help mailing list archive at Nabble.com. ______________________________________________ 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.