【问题标题】:How to pass arraylist from Java to R and do data quality check?如何将数组列表从 Java 传递到 R 并进行数据质量检查?
【发布时间】:2013-07-30 21:45:24
【问题描述】:

我正在使用 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 或空白值并进行计算。真的需要这方面的帮助。

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

【问题讨论】:

    标签: java r rserve


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多