2011-04-25 19 views
11

No soy un programador de Java. Yo programo R y C++. Tengo un código de Java que quiero incluir en un paquete R. Los conceptos básicos del programa son los siguientes:¿Por dónde empiezo con rJava?

  1. Leer los datos de la entrada estándar.
  2. Ejecutar una cadena MCMC.
  3. salida a un archivo.

Quiero convertir esto a R, donde puedo ejecutar el programa desde R. Estoy familiarizado con el paquete Rcpp y estoy acostumbrado a algunas de las comodidades de la misma. ¿Dónde empiezo con el paquete rJava para aprender a usar este código?

Específicamente tengo las siguientes preguntas.

  1. Cómo transferir datos a java desde R, p. vector numérico, factor, etc.
  2. ¿Cómo ejecuto los métodos de una clase?
  3. ¿Cómo incluyo el código de Java en un paquete?

La documentación de rJava no es de mucha ayuda. ¿Alguien tiene un tutorial sobre esto?

+2

Hola Andrew: la página de rJava en CRAN enumera varias docenas de paquetes que la usan.¿Tal vez puedas golpear con un palo a esos para ver cómo hacen las cosas? –

+1

@JDLong tiene un buen ejemplo de cálculo de la radiación solar en la superficie de la Tierra. Tal vez él puede ingresar y señalar el código fuente (tal vez buscar "cmasticación" en github. –

Respuesta

5

Hay una manera "simple" de hacer esto y una manera algo más difícil de hacer esto. Soy un hombre sencillo por lo que me inclino hacia la solución simple:

myCommand <- paste("/path/to/java", argument1, argument2, sep=" ") 
system(shQuote(myCommand)) 

Entonces leído en el archivo de salida utilizando cualquier función R tiene sentido.

La solución más difícil es editar el código de Java para que no se lea de stdin, pero se pasa un vector u otro objeto de Java. Realmente no puedo generalizar acerca de cómo modificar el código de Java, pero si la función de Java necesita en última instancia, para ser alimentado un vector, usted lo haría algo como esto:

.jinit() 
v <- .jnew("java/util/Vector") 
rVector <- as.character(1:10) 
addToV <- function(item){ 
    v$add(item) 
} 
sapply(rVector, addToV) 

siempre encuentro frente a los tipos de rJava es un dolor considerable, como puedes ver arriba.

Un consejo que le ahorrará un tiempo considerable es el siguiente: Cuando tiene un objeto Java creado en rJava, puede averiguar sus métodos escribiendo el nombre, un signo de dólar y luego presionando la tecla tab. Así, utilizando la v objeto creado por encima de tipo "V $" y usted debe conseguir esto:

1> v$ 
v$add(    v$hashCode()   v$contains(   v$size()    v$elementAt(   v$capacity()   v$containsAll(  v$firstElement()  v$removeElement(  v$iterator()   v$wait() 
v$get(    v$clone()    v$isEmpty()   v$toArray()   v$remove(    v$ensureCapacity(  v$removeAll(   v$insertElementAt( v$removeElementAt( v$listIterator()  v$getClass() 
v$equals(    v$indexOf(   v$lastIndexOf(  v$toArray(   v$elements()   v$trimToSize()   v$retainAll(   v$lastElement()  v$setElementAt(  v$listIterator(  v$notify() 
v$toString()   v$clear()    v$addAll(    v$addElement(   v$set(    v$subList(   v$copyInto(   v$removeAllElements() v$setSize(   v$wait(    v$notifyAll() 
1> v$ 

Buena suerte, y estar seguro y gritar si tiene inconvenientes específicos.

+0

Gracias, Esto debería darme lo que necesito para que todo funcione. –

3

Esto está cubierto en el documento de desarrollo del complemento Deducer. Si bien está orientado a paquetes que extienden Deducer, algunas secciones son generales.

Operando métodos Java en I: http://www.deducer.org/pmwiki/pmwiki.php?n=Main.Development#wwjoir

Llevar objetos R en java y la creación de un paquete con el código de Java: http://www.deducer.org/pmwiki/pmwiki.php?n=Main.Development#suaptijc

La revelación completa: Deducer es mi proyecto.

+0

Como tiene el enlace www.deducer.org en su perfil, también debe mencionar en su respuesta que está afiliado al producto (s)/solución (es) que usted propone –

+1

Bastante. He agregado una declaración de divulgación. –

Cuestiones relacionadas