在R中呼叫Java程式碼
阿新 • • 發佈:2019-01-07
我們都知道Java語言長期處於霸主地位,在所有程式語言排行榜中,Java也是常年位居第一。在近幾年也是爆炸式發展,幾乎覆蓋到了應用開發的所有領域。而R語言則在統計圈和資料視覺化處於佼佼者,如果將Java的通用性和R的專業性緊密結合起來,就可以碰撞出不一樣的火花。
在之前兩篇文章中我已經寫了如何在Java程式中呼叫R程式碼,連結分別為:
JAVA呼叫R語言之Rserve http://blog.csdn.net/wzgl__wh/article/details/52793558
JAVA呼叫R語言之Rserve(二) http://blog.csdn.net/wzgl__wh/article/details/52958716
想必很多人都知道rjava包是一個R語言和Java語言的通訊介面,通過底層JNI實現呼叫,允許R直接呼叫java物件的方法。可今天我就一個簡單的函式system()來實現在R語言直接呼叫Java程式。
public class NoParameter { public void printFibo(int n){ for(int i=1;i<=n;i++){ System.out.println(f(i)+" "); if (i%10==0) { System.out.println(); } } } long f(long n){ if (n==1||n==2) { return 1; } else { return f(n-1)+f(n-2); } } public static void main(String[] args) { // TODO Auto-generated method stub new NoParameter().printFibo(5); } }
這段程式碼是用於計算斐波拉契數列的,我已經給了初值為5,執行結果為:
在R語言中,我們只需要用兩句話就可以呼叫這個程式:
system("javac NoParameter.java")#生成.class檔案
system("java NoParameter")#執行NoParameter檔案
執行結果如下:
這個程式是需要我們在執行時輸入一個引數才可以繼續執行。public class Parameter { public void printFibo(int n){ for(int i=1;i<=n;i++){ System.out.println(f(i)+" "); if (i%10==0) { System.out.println(); } } } long f(long n){ if (n==1||n==2) { return 1; } else { return f(n-1)+f(n-2); } } public static void main(String[] args) { new Parameter().printFibo(Integer.parseInt(args[0])); } }
這個在R語言中也需要兩句話就可以執行:
system("javac Parameter.java")
system("java Parameter 6")
執行結果為這裡需要注意的就是Main函式引數String[] args,它是一個字串陣列,用來接收從命令列輸入的引數。引數之間用空格隔開,java直譯器會自動處理,把用空格隔開的每一個引數通過args陣列傳遞給main方法。引數下標從0開始,args[0]就代表1第一個引數。當然輸入引數之間可以有多個空格,中間的多個空格會被忽略掉。
轉載請註明原文連結:http://blog.csdn.net/wzgl__wh/article/details/55254070