- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 Eclipse IDE 从 Java 测试 rJava 包。在测试 rJava/JRI 包中的 rtest.java 时,某些命令失败,但有些命令成功。无法理解为什么或如何解决它。以下是系统详细信息:
操作系统:Windows 10 64位,R版本3.0.2(2013-09-25)——《飞盘航行》64位rJava版本:0.9-6,Java:Oracle JDK 1.7,Eclipse版本:3.8.2。
以下是rtest.java代码:
import java.io.*;
import java.awt.Frame;
import java.awt.FileDialog;
import java.util.Enumeration;
import org.rosuda.JRI.Rengine;
import org.rosuda.JRI.REXP;
import org.rosuda.JRI.RList;
import org.rosuda.JRI.RVector;
import org.rosuda.JRI.RMainLoopCallbacks;
class TextConsole implements RMainLoopCallbacks
{
public void rWriteConsole(Rengine re, String text, int oType) {
System.out.print(text);
}
public void rBusy(Rengine re, int which) {
System.out.println("rBusy("+which+")");
}
public String rReadConsole(Rengine re, String prompt, int addToHistory) {
System.out.print(prompt);
try {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String s=br.readLine();
return (s==null||s.length()==0)?s:s+"\n";
} catch (Exception e) {
System.out.println("jriReadConsole exception: "+e.getMessage());
}
return null;
}
public void rShowMessage(Rengine re, String message) {
System.out.println("rShowMessage \""+message+"\"");
}
public String rChooseFile(Rengine re, int newFile) {
FileDialog fd = new FileDialog(new Frame(), (newFile==0)?"Select a file":"Select a new file", (newFile==0)?FileDialog.LOAD:FileDialog.SAVE);
fd.show();
String res=null;
if (fd.getDirectory()!=null) res=fd.getDirectory();
if (fd.getFile()!=null) res=(res==null)?fd.getFile():(res+fd.getFile());
return res;
}
public void rFlushConsole (Rengine re) {
}
public void rLoadHistory (Rengine re, String filename) {
}
public void rSaveHistory (Rengine re, String filename) {
}
}
public class rtest {
public static void main(String[] args) {
// just making sure we have the right version of everything
if (!Rengine.versionCheck()) {
System.err.println("** Version mismatch - Java files don't match library version.");
System.exit(1);
}
System.out.println("Creating Rengine (with arguments)");
// 1) we pass the arguments from the command line
// 2) we won't use the main loop at first, we'll start it later
// (that's the "false" as second argument)
// 3) the callbacks are implemented by the TextConsole class above
Rengine re=new Rengine(args, false, new TextConsole());
System.out.println("Rengine created, waiting for R");
// the engine creates R is a new thread, so we should wait until it's ready
if (!re.waitForR()) {
System.out.println("Cannot load R");
return;
}
/* High-level API - do not use RNI methods unless there is no other way
to accomplish what you want */
try {
REXP x;
re.eval("data(iris)",false);
System.out.println(x=re.eval("iris"));
// generic vectors are RVector to accomodate names
RVector v = x.asVector();
if (v.getNames()!=null) {
System.out.println("has names:");
for (Enumeration e = v.getNames().elements() ; e.hasMoreElements() ;) {
System.out.println(e.nextElement());
}
}
// for compatibility with Rserve we allow casting of vectors to lists
RList vl = x.asList();
String[] k = vl.keys();
if (k!=null) {
System.out.println("and once again from the list:");
int i=0; while (i<k.length) System.out.println(k[i++]);
}
// get boolean array
System.out.println(x=re.eval("iris[[1]]>mean(iris[[1]])"));
// R knows about TRUE/FALSE/NA, so we cannot use boolean[] this way
// instead, we use int[] which is more convenient (and what R uses internally anyway)
int[] bi = x.asIntArray();
{
int i = 0; while (i<bi.length) { System.out.print(bi[i]==0?"F ":(bi[i]==1?"T ":"NA ")); i++; }
System.out.println("");
}
// push a boolean array
boolean by[] = { true, false, false };
re.assign("bool", by);
System.out.println(x=re.eval("bool"));
// asBool returns the first element of the array as RBool
// (mostly useful for boolean arrays of the length 1). is should return true
System.out.println("isTRUE? "+x.asBool().isTRUE());
// now for a real dotted-pair list:
System.out.println(x=re.eval("pairlist(a=1,b='foo',c=1:5)"));
RList l = x.asList();
if (l!=null) {
int i=0;
String [] a = l.keys();
System.out.println("Keys:");
while (i<a.length) System.out.println(a[i++]);
System.out.println("Contents:");
i=0;
while (i<a.length) System.out.println(l.at(i++));
}
System.out.println(re.eval("sqrt(36)"));
} catch (Exception e) {
System.out.println("EX:"+e);
e.printStackTrace();
}
// Part 2 - low-level API - for illustration purposes only!
//System.exit(0);
// simple assignment like a<-"hello" (env=0 means use R_GlobalEnv)
long xp1 = re.rniPutString("hello");
re.rniAssign("a", xp1, 0);
// Example: how to create a named list or data.frame
double da[] = {1.2, 2.3, 4.5};
double db[] = {1.4, 2.6, 4.2};
long xp3 = re.rniPutDoubleArray(da);
long xp4 = re.rniPutDoubleArray(db);
// now build a list (generic vector is how that's called in R)
long la[] = {xp3, xp4};
long xp5 = re.rniPutVector(la);
// now let's add names
String sa[] = {"a","b"};
long xp2 = re.rniPutStringArray(sa);
re.rniSetAttr(xp5, "names", xp2);
// ok, we have a proper list now
// we could use assign and then eval "b<-data.frame(b)", but for now let's build it by hand:
String rn[] = {"1", "2", "3"};
long xp7 = re.rniPutStringArray(rn);
re.rniSetAttr(xp5, "row.names", xp7);
long xp6 = re.rniPutString("data.frame");
re.rniSetAttr(xp5, "class", xp6);
// assign the whole thing to the "b" variable
re.rniAssign("b", xp5, 0);
{
System.out.println("Parsing");
long e=re.rniParse("data(iris)", 1);
System.out.println("Result = "+e+", running eval");
long r=re.rniEval(e, 0);
System.out.println("Result = "+r+", building REXP");
REXP x=new REXP(re, r);
System.out.println("REXP result = "+x);
}
{
System.out.println("Parsing");
long e=re.rniParse("iris", 1);
System.out.println("Result = "+e+", running eval");
long r=re.rniEval(e, 0);
System.out.println("Result = "+r+", building REXP");
REXP x=new REXP(re, r);
System.out.println("REXP result = "+x);
}
{
System.out.println("Parsing");
long e=re.rniParse("names(iris)", 1);
System.out.println("Result = "+e+", running eval");
long r=re.rniEval(e, 0);
System.out.println("Result = "+r+", building REXP");
REXP x=new REXP(re, r);
System.out.println("REXP result = "+x);
String s[]=x.asStringArray();
if (s!=null) {
int i=0; while (i<s.length) { System.out.println("["+i+"] \""+s[i]+"\""); i++; }
}
}
{
System.out.println("Parsing");
long e=re.rniParse("rnorm(10)", 1);
System.out.println("Result = "+e+", running eval");
long r=re.rniEval(e, 0);
System.out.println("Result = "+r+", building REXP");
REXP x=new REXP(re, r);
System.out.println("REXP result = "+x);
double d[]=x.asDoubleArray();
if (d!=null) {
int i=0; while (i<d.length) { System.out.print(((i==0)?"":", ")+d[i]); i++; }
System.out.println("");
}
System.out.println("");
}
{
REXP x=re.eval("1:10");
System.out.println("REXP result = "+x);
int d[]=x.asIntArray();
if (d!=null) {
int i=0; while (i<d.length) { System.out.print(((i==0)?"":", ")+d[i]); i++; }
System.out.println("");
}
}
re.eval("print(1:10/3)");
if (true) {
// so far we used R as a computational slave without REPL
// now we start the loop, so the user can use the console
System.out.println("Now the console is yours ... have fun");
re.startMainLoop();
} else {
re.end();
System.out.println("end");
}
}
}
以下是控制台输出:
Creating Rengine (with arguments)
Warning message:
In local({ : bytecode version mismatch; using eval
Error in objects(db.pos, all.names = TRUE) :
3 arguments passed to .Internal(ls) which requires 2
R version 3.0.2 (2013-09-25) -- "Frisbee Sailing"
Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
Error in .Internal(isRegisteredNamespace(name)) :
there is no .Internal function 'isRegisteredNamespace'
Rengine created, waiting for R
Error: could not find function "data"
Error: object 'iris' not found
null
EX:java.lang.NullPointerException
Parsing
Result = 228955128, running eval
java.lang.NullPointerExceptionError: could not find function "data"
Result = 0, building REXP
at rtest.main(rtest.java:85)
REXP result = [NULL ]
Parsing
Result = 228997656, running eval
Error: object 'iris' not found
Result = 0, building REXP
REXP result = [NULL ]
Parsing
Result = 229003584, running eval
Error: object 'iris' not found
Result = 0, building REXP
REXP result = [NULL ]
Parsing
Result = 229018880, running eval
Error: could not find function "rnorm"
Result = 0, building REXP
REXP result = [NULL ]
REXP result = [INT* (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)]
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
[1] 0.3333333 0.6666667 1.0000000 1.3333333 1.6666667 2.0000000 2.3333333
[8] 2.6666667 3.0000000 3.3333333
Now the console is yours ... have fun
rBusy(0)
>
最佳答案
卸载现有的 R 3.0.2 并安装 R 3.2.4,并将 rjava 升级到 0.9-8 后,一切都像魅力一样工作!!
关于java - 使用 eclipse 中的 rJava/JRI 包时,一些命令在 rtest.java 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36208252/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!