Das würde dann eine Exception an anderer Stelle auslösen, wie sieht der Code für den Aufruf von R aus?
analog zu dem code den ich oben gespotet habe. bzw. hab ich noch einen der R aus einer datei einließt und ausführt (alter Code den ich irgendwann mal überarbeiten muss):
package mainServerApi;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Properties;
import rcaller.RCaller;
public class ReadAndCallRScript {
private RCaller call;
private String rCode;
private ArrayList<String> functionName;
private String pfadToR;
public ReadAndCallRScript(ArrayList<String> nameRScript) throws IOException {
Properties props = new Properties();
props.load(ReadAndCallRScript.class.getResourceAsStream("/portfolioOptimierungTWS.property"));
pfadToR = "/usr/bin/Rscript";
call = new RCaller();
call.setRscriptExecutable(pfadToR);
functionName = nameRScript;
rCode = "";
for (int i = 0; i < nameRScript.size(); i++)
rCode += "\n" + read("/rSourceLib/" + nameRScript.get(i) + ".R");
}
public String callRCode(double[] rendite, String[] input_timeline) throws IOException {
String result = "";
call.addDoubleArray("rendite", rendite);
call.addStringArray("x", input_timeline);
call.addRCode(rCode);
call.addRCode("result<-" + functionName.get(0) + "(x)");
call.runAndReturnResult("result");
result = call.getParser().getAsStringArray("result")[0];
call.cleanRCode();
call = new RCaller();
call.setRscriptExecutable(pfadToR);
return result;
}
public static String read(String pfad) throws IOException {
String str = "";
InputStream is = ReadAndCallRScript.class.getResourceAsStream(pfad);
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String row = "";
while ((row = reader.readLine()) != null)
str += "\n" + row;
reader.close();
return str;
}
public static ArrayList<String> readA(String pfad) throws IOException {
ArrayList<String> l = new ArrayList<String>();
InputStream is = ReadAndCallRScript.class.getResourceAsStream(pfad);
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String row = "";
while ((row = reader.readLine()) != null)
l.add(row);
reader.close();
return l;
}
public static String read2(String pfad) throws IOException {
String str = "";
File file = new File(pfad);
BufferedReader reader = new BufferedReader(new FileReader(file));
String row = "";
while ((row = reader.readLine()) != null) {
if (!str.equals(""))
str += "\n";
str += row;
}
reader.close();
return str;
}
}
- Ich könnte die jar RCaller falsch installiert haben die für die kommunikation zwischen Java und R gebraucht wird (http://stdioe.blogspot.de/search/label/rcaller).
Da dieses jar ja offensichtlich genutzt wird, wäre das unwahrscheinlich.
ich benutze "sudo R" um dann Runiversal mit installPackag zu installieren. sprich ich hab den befehl in die R console geschrieben und fertig. ich denke das reicht (so hats zumindest bei windows gereicht)?
- Ich könnte R nicht ausreichend installiert haben. Bei der Anleitung: https://wiki.ubuntuusers.de/R/
Welche der drei dort angegebenen Alternativen hast du genutzt?
ich habe ubuntu 15 (glaube ich) und habe:
das hier irgendwo in die conf eingetragen:
deb http://ftp5.gwdg.de/pub/misc/cran/bin/linux/ubuntu trusty/
das hier gemacht:
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com E084DAB9
und das hier:
sudo apt-get install r-base
Kannst du R denn ohne Java ausführen? Als der User in dessen Kontext es später laufen wird?
als ein user kann ich das, welchen user mein tomcat benutzt weiß ich aber garnicht. es gibt eigendlich nur einen user auf meinem ubuntu und das was als root da war, mein tomcat müsste vom root installiert werden sein (als default beim ubuntu installieren)