【问题标题】:Initializing a HashMap<String, Double> through rJava通过 rJava 初始化 HashMap<String, Double>
【发布时间】:2018-04-09 11:21:59
【问题描述】:

我正在尝试使用类型为 &lt;String, Double&gt; 的 rJava 初始化 HashMap,但不明白如何使用 rJava 接口来完成此操作。我基本上是在寻找相当于

HashMap<String, Double> x = new HashMap<String, Double>();

但使用 rJava 代替。我可以很容易地生成一个HashMap&lt;String, String&gt;,如下例所示,但自然不能用双精度值填充值(这是我想要实现的)。

library(rJava)
.jinit()

# this works but gives me a <String, String> hashmap
x <- .jnew("java/util/HashMap")
.jrcall(x, "put", "a", "1")
x

#> [1] "Java-Object{{a=1}}"

# failing example of what I'd like to do
.jrcall(x, "put", "b", 2)

#> Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl,  : 
#>   java.lang.NoSuchMethodException: No suitable method for the given parameters

我尝试使用.jcall() 在以下主题的几个变体中将组合串在一起:

.jcall("java/util/HashMap",
       "Ljava/util/HashMap;[Ljava/lang/String;Ljava/lang/Double;",
       "<init>")
#> Error in .jcall("java/util/HashMap", "Ljava/util/HashMap; 
#>   [Ljava/lang/String;Ljava/lang/Double;",  : 
#>   method <init> with signature ()Ljava/util/HashMap; 
#>   [Ljava/lang/String;Ljava/lang/Double; not found

但到目前为止还没有成功。

【问题讨论】:

  • .jrcall(y, "put", "b", 2) 究竟是如何失败的?错误信息是什么?
  • 我已经用这个信息更新了问题@Thilo
  • 不熟悉RJava,但可能找不到方法,因为它不会自动将原始数字参数装箱。你能试试.jrcall(y, "put", "b", twoAsJavaDoubleInstance)吗(不知道如何从R中得到后者,不过在Java中它会是Double.valueOf(2)))?

标签: java r rjava


【解决方案1】:

您可以使用.jnew("java/lang/Double", value) 创建一个Double 对象:

library(rJava)
.jinit()

x <- .jnew("java/util/HashMap")
y <- .jnew("java/lang/Double", 3.14)
.jrcall(x, "put", "a", y)

x
[1] "Java-Object{{a=3.14}}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 2018-06-15
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多