0

我正在使用 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.

结果显然是错误的。如何将具有 NULL 值的数组列表分配给 R 向量?

基本上我希望 R 识别从 Java 传递的 NULL 或空白值并进行计算。真的需要帮助。

非常感谢!!!!!!!!!!!!!

4

1 回答 1

1

如果您正在加载双打,您可以使用 REXPDouble 类。这有一个构造函数,它将获取一个双精度列表。使用它分配给工作区。如果您已经有一个数组列表,只需使用数组列表的内置函数 toArray() 将其转换为数组。

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

conn.assign("随便", 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;
}
于 2013-07-30T21:58:28.117 回答