2015-11-10 62 views
2

我正在使用名为CDK的第三方库。我试图用rJava创建该类Bond的一个实例:如何使用rJava访问枚举?

o1 <- .jnew("org.openscience.cdk.Atom","O") 
o2 <- .jnew("org.openscience.cdk.Atom","O") 
J("org.openscience.cdk.Bond",o1,o2, 
    "org.openscience.cdk.interfaces.IBond.Order.SINGLE") 

的问题是有这个接口IBond定义枚举,我需要把它作为参数传递给构造Bond(IAtom atom1, IAtom atom2, IBond.Order order)但我不不知道如何使用rJava来做到这一点。

我试图

J("org.openscience.cdk.Bond",o1,o2, 
    J("org.openscience.cdk.interfaces.IBond.Order")$SINGLE) 

希望SINGLE可以像任何其他静态字段/方法进行访问,但没有奏效。

有没有办法将Enum传递给使用rJava的方法?

+0

你有没有设法让CDK债券创建工作?我遇到了尝试从R中创建CDK分子的错误。 – zach

回答

2

我发现这样做的方法,我用的是美元符号指在IBond接口中声明公共枚举Order,然后另一美元符号来访问枚举值:

J("org.openscience.cdk.interfaces.IBond")$Order$SINGLE 
1

它是一个嵌套类,因此适当的名称为org.openscience.cdk.interfaces.IBond$Order

> .jfields("org.openscience.cdk.interfaces.IBond$Order") 
[1] "public static final org.openscience.cdk.interfaces.IBond$Order org.openscience.cdk.interfaces.IBond$Order.SINGLE" 
[2] "public static final org.openscience.cdk.interfaces.IBond$Order org.openscience.cdk.interfaces.IBond$Order.DOUBLE" 
[3] "public static final org.openscience.cdk.interfaces.IBond$Order org.openscience.cdk.interfaces.IBond$Order.TRIPLE" 
[4] "public static final org.openscience.cdk.interfaces.IBond$Order org.openscience.cdk.interfaces.IBond$Order.QUADRUPLE" 
[5] "public static final org.openscience.cdk.interfaces.IBond$Order org.openscience.cdk.interfaces.IBond$Order.QUINTUPLE" 
[6] "public static final org.openscience.cdk.interfaces.IBond$Order org.openscience.cdk.interfaces.IBond$Order.SEXTUPLE" 
[7] "public static final org.openscience.cdk.interfaces.IBond$Order org.openscience.cdk.interfaces.IBond$Order.UNSET"  

因此,“正常”的方式将任

> .jfield("org.openscience.cdk.interfaces.IBond$Order",,"SINGLE") 
[1] "Java-Object{SINGLE}" 
> J("org.openscience.cdk.interfaces.IBond$Order")$SINGLE 
[1] "Java-Object{SINGLE}"