通过rJava初始化HashMap <String,Double>

Joh*_*son 5 java r rjava

我正在尝试使用类型的rJava初始化HashMap,<String, Double>但不了解如何使用rJava接口完成此操作.我基本上是在找相同的

HashMap<String, Double> x = new HashMap<String, Double>();
Run Code Online (Sandbox Code Playgroud)

但是使用rJava代替.我可以很容易地生成HashMap<String, String>如下面的示例所示,但自然不能用双精度填充值(这是我想要实现的).

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
Run Code Online (Sandbox Code Playgroud)

我尝试.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
Run Code Online (Sandbox Code Playgroud)

但到目前为止还没有任何成功.

Jua*_*ado 4

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

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}}"
Run Code Online (Sandbox Code Playgroud)