R语言奇怪的行为

时间:2012-11-26 08:15:48

标签: java r rcaller

我正在使用一些R代码以使用BG-NBD模型实现 我正在使用Java,我使用RCaller调用R. 我必须承认我对R真的很新,所以也许我做错了。 我使用此网址上的代码:http://code.google.com/p/clv-master-thesis/ 这是我工作的Java代码(一个简单的Junit测试):

@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);
}
}

通过运行此代码,所有工作都很好;现在我不想使用csv文件作为数据源;我想查询DB并将数据传递给R 据我所知,R read.table函数通过读取提供的csv文件来构建data.frame。所以我做的是: 我使用Java来读取csv并且我编写了这段代码(在我读完csv文件后,为了简单起见,我没有编写与csv读取相关的代码):

@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);
}
}

正如您所看到的,代码与前一代码完全相似,只是我不使用read.table函数。 好吧,通过执行此代码我有一个错误。起初我在Java代码中遇到了一些错误,但我检查过并且没有出现错误 然后我尝试了R控制台中的代码。我有一些非常奇怪的东西。 让我们从这条指令开始(从csv文件中恢复int数组):

int[] ordini = (int[]) data.get("ordini");
code.addIntArray("p1x", ordini);

此Java-RCaller指令生成此R代码:p1x&lt; -c(..........)。更确切地说,生成的R代码如下(准备就绪:它很大):

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);

当我在R控制台中执行此功能时,我有一些奇怪的行为;有时它似乎没有被执行其他时间我有一个错误,如“......中的意外元素”,我真的无法想象我错了... 相反,如果我使用“read.table函数”,所有工作都很好。 你能给我一些提示吗? 我错了吗?

0 个答案:

没有答案
相关问题