hmm: Stecknadel im Heuaufen: Programmpfad geht auf WIndows aber nicht auf Ubuntu

Beitrag lesen

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;

	/**
	 * Der Konstruktor speichert alle relevanten Informationen und erzeugt einen
	 * RCaller.
	 * 
	 * @param nameRScript
	 * @throws IOException
	 */
	public ReadAndCallRScript(ArrayList<String> nameRScript) throws IOException {
		
		Properties props = new Properties();
		props.load(ReadAndCallRScript.class.getResourceAsStream("/portfolioOptimierungTWS.property"));
		
		pfadToR = "/usr/bin/Rscript";
		//props.getProperty("portfolioOptimierungTWS.rPath");
		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");

	}

	/**
	 * Ruft das R Script mit dem Input input_timeline auf und returnt das
	 * Erebniss. visualisierung==true: es wir die methode zum aufrufen von r
	 * plots genutzt.
	 * 
	 * @param input_timeline
	 * @param visualisierung
	 * @return
	 * @throws IOException
	 */
	public String callRCode(double[] rendite, String[] input_timeline) throws IOException {
		String result = "";

		/*
		 * if(visualisierung) callVisualisierung(); else {
		 */
		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();
		//String pfadToR = read("rSourceLib/R.properties");
		call = new RCaller();
		call.setRscriptExecutable(pfadToR);
		// }

		return result;
	}

	/*public String callRCodeTwo(int[] n, double[] input_timeline) throws IOException {
		String result = "";

		call.addIntArray("n", n);
		call.addDoubleArray("x", input_timeline);
		call.addRCode(rCode);
		call.addRCode("result<-" + functionName.get(0) + "(n,x)");

		call.runAndReturnResult("result");
		result = call.getParser().getAsStringArray("result");

		call.cleanRCode();
		//String pfadToR = read("/R.properties");
		call = new RCaller();
		call.setRscriptExecutable(pfadToR);

		return result;
	}*/

	/**
	 * Liesst die Datei aus den lokalen Ressourcen ein, die unter dem Pfad pfad
	 * zufinden ist.
	 * 
	 * @param pfad
	 * @return
	 * @throws IOException
	 */
	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;
	}

	/**
	 * Liesst die Datei ein, die unter dem Pfad pfad zufinden ist.
	 * 
	 * @param pfad
	 * @return
	 * @throws IOException
	 */
	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;
	}

}

  1. 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)?

  1. 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)