我对scala很新。
我正在使用rscala与R函数集成。 例如,我使用以下方法调用R函数并检索String值。
方法签名:
def invokeS0(function:Reference,args:Any *):String
方法实施
val v= rc.invokeS0("doPred","lemmas"->"Communicate,Design,Java,","frequency"->"3,3,1")
我的问题
但是,rc.invokeS0可以调用任何函数,因此可以有任意数量的参数。
我正在考虑构建一个包装器方法,该方法将函数名称作为String,参数作为Map。也许是这样的:
private def invokeRStringFunction(functionName: String = "testFunction", args: Map[String,String]): Unit =
{
/**Iterate through map to generate following code*/
val v= rc.invokeS0(functionName,mapKey1->mapValue1,mapKey2->mapValue2 etc etc)
}
但是我不确定如何编写代码,因为参数的数量是动态的。坦白说,我不确定是否有可能,但我想我会检查,以防万一。
任何提示都将不胜感激。
答案 0 :(得分:2)
使用Map[String, String]
将Seq[(String, String)]
转换为args.toSeq
,然后使用_*
ascription将其作为一系列参数传递,而不只是一个。
def invokeRStringFunction(functionName: String, args: Map[String, String]): Unit
= rc.invokeS0(functionName, args.toSeq: _*)