2013-07-30 48 views
0

我正在使用Rserve使用Java代碼調用R函數。我的項目需要我接收一個向量並將其傳遞給R.例如,我定義了如何將ArrayList從Java傳遞到R並進行數據質量檢查?

ArrayList data = new ArrayList(); 
      data.add("10.0"); 
      data.add("11.0"); 
      data.add(null); 

然後我得到一個數組列表:[10.0,11.0,null]。我試圖用c.assign("x",data);指定數組列表變量x,但是Eclipse給了我一個錯誤

The method assign(String, String) in the type RConnection is not applicable for the arguments (String, ArrayList<String>) 

所以不是,我用

c.assign("x",data.toString()); 

計算

1.Fill rate (Return result should be 66.67%) 

    nrow(matrix(x)) - sum(is.na(x)))/nrow(matrix(x)) 

2. Quantiles 

    quantile (x, c(.01, .05, .1, .25, .5, .75, .9, .95, .99)) 

,並得到

1.Fill rate = 1.0; 
2.Error in calculating Quantiles because there is NULL value in the array list. 

結果顯然是錯誤的。如何爲R向量分配一個帶NULL值的數組列表?

基本上我想讓R識別從Java傳遞的NULL或空白值並進行計算。真的需要幫助。

非常感謝!!!!!!!!!!!!!

回答

1

如果您正在加載雙打,您可以使用REXPDouble類。這有一個構造函數,將採取雙打名單。使用它來分配給工作區。如果你已經有一個數組列表,只需使用數組列表的內置函數toArray()將其轉換爲一個數組。

public REXPDouble(double[] load) { 
      super(); 
      payload=(load==null)?new double[0]:load; 
    } 

conn.assign(「whatever」,rexpDoubles);

另外還有一個REXPString。

/** create a new character vector 
* @param load string elements of the vector */ 
public REXPString(String[] load) { 
    super(); 
    payload=(load==null)?new String[0]:load; 
} 
相關問題