Это мой пример R файла:Определение значений строки или ошибки, отправленные из RServe в Java
# filename: sample.R
main <- function(){
returnStringValue <- "ignore"
return (returnStringValue)
}
main()
Сейчас я пытаюсь источник на файл на Rserve с помощью Java:
import org.rosuda.REngine.REXP;
import org.rosuda.REngine.Rserve.RConnection;
public class RServeTest {
static RConnection rcon;
public static void main(String[] args) {
try {
String fileName = "sample.R";
String filePath = "/filepath/";
try {
rcon = new RConnection();
}
catch(Exception e){
System.out.println("Error Connecting: "+e);
}
String rCode = "source(\""+filePath+fileName+"\")";
System.out.println("Rscript call on file: "+rCode);
REXP r = rcon.parseAndEval("try(eval(parse(text="+rCode+")),silent=TRUE)");
System.out.println("r object: "+r.asString());
if (r.inherits("try-error"))
System.err.println("Error: "+r.asString());
else
System.out.println("Executed R code successfully.");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
, который дает меня следующая ошибка:
Rscript call on file: source("/home/maverick/Documents/sem3/agent code/sample.R")
Error: Error in eval(expr, envir, enclos) : object 'ignore' not found
Как обрабатывать строковые значения, возвращаемые из кода R, не влияя на ошибки получения cau GHT?
Для например:
Скажем, у меня есть ошибка в моем коде:
main <- function(){
returnStringValue <- "ignore"
# error
var1+1
return (returnStringValue)
}
main()
код Java должен войти:
Rscript call on file: source("/filepath/sample.R")
Error: Error in main() : object 'var1' not found
, а не протоколирование:
org.rosuda.REngine.Rserve.RserveException: eval failed, request status: error code: 127
at org.rosuda.REngine.Rserve.RConnection.eval(RConnection.java:233)
at RServeTest.main(RServeTest.java:39)
Я не думаю, что это проблема. Когда я делаю это, я получаю эту ошибку 'Ошибка: ошибка в файле (имя файла,« r »): не удается открыть соединение' –