如何将arraylist从Java传递到R并进行数据质量检查?

时间:2013-07-30 21:45:24

标签: java r rserve

我正在使用Rserve使用Java代码调用R函数。我的项目要求我接收一个向量并将其传递给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 个答案:

答案 0 :(得分: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;
}