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



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

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

而是使用 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

我尝试使用以下主题的几种变体中使用.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

但到目前为止,没有任何成功。

您可以使用

.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}}"

相关内容

最新更新