2013-01-16 89 views
0

中可見我正在嘗試Java客戶端進行rserve。我中的R所定義的函數,如下所示:通過Rserve找不到功能,但在R

bar <- function(x) { x+1 } 

執行這個內部R已適時提供以下的(預期的)輸出:

> bar(1) 
[1] 2 

然而,在執行Java代碼:

public static void main(String[] args) throws REXPMismatchException, REngineException { 
    RConnection c = new RConnection(); 
    REXP x = c.eval("try({bar(1)}, silent=TRUE)"); 
    System.out.println(x.asString()); 

} 

給出以下輸出:

Error in try({ : could not find function "bar" 

R控制檯以下消息裏面輸出:

> Error: could not find function "bar" 

有什麼我需要做的,使我的功能可見Rserve?

Steve

回答

0

您正在定義不同工作空間/進程中的函數。 Rserve和R不共享相同的進程空間,因此在一箇中聲明您的方法不會使其出現在Rserve工作區中。

public static void main(String[] args) throws REXPMismatchException, REngineException { 
    RConnection c = new RConnection(); 
    REXP x = c.eval("try({bar <- function(x) { x+1 }; bar(1)}, silent=TRUE)"); 
    System.out.println(x.asString()); 
} 
0

我有類似的問題,你需要存儲的時候Rserve開始被稱爲(同一個進程內)文件的R代碼裏面,將要採取的步驟:

  1. 與創建文件你的R代碼裏面(功能等...),並將其命名例如filename.R

  2. 創建Rserv.conf文件並粘貼有行

    源/路徑,其中R代碼的文件/ filename.R

  3. 運行R.發球使用命令

    Rserve(調試= TRUE,ARGS =' - 不保存--RS-CONF /路徑Rserv文件/ Rserv.conf')

它應該工作...