2010-01-12 53 views
12

¿Hay alguna forma de ejecutar scripts R a través de Apache y PHP? Me gustaría poder pasar variables de PHP a R.Usando R con Apache y PHP

¿Alguien ha hecho algo como esto?

Básicamente, me gustaría saber si existe un método para pasar variables de PHP a R en un servidor apache.

Respuesta

5

Personalmente utilizamos la interfaz R CMD BATCH a R para lograr esto. No es muy elegante, pero esencialmente tenemos un usuario pegando datos en un formulario que se pasa a PhP que genera un archivo .R con algo

x = c (1,2,3,4); dev.off(); gráfico (x);

A continuación, obtener PHP para hacer un ejecutivo "R CMD LOTE"

En el directorio a continuación, debe obtener el archivo Rplots.ps que se puede servir al cliente. Igualmente puede usar la función jpeg() para devolver una imagen jpeg del gráfico que luego puede mostrarse en la página web que devuelve PhP.

No es nada elegante, pero nos funciona.

+0

Gracias por la Respuesta dangerstat. Esta no era la mejor solución, pero así que lo elegí. En otro foro, encontré dos opciones que eran mucho más agradables para mis propósitos. –

7

Véase el R-FAQ:

Dos proyectos usan PHP para proporcionar una interfaz web a R. R_PHP_Online por Steve Chen (aunque no está claro si este proyecto está todavía activa) es algo similar a la Rcgi y rWeb anteriormente. R-php está desarrollado activamente por Alfredo Pontillo y Angelo Mineo y proporciona una interfaz web para R y un conjunto de análisis preespecificados que no necesitan la entrada de código R.

y este documento: Using R via PHP for Teaching Purposes: R-php

+0

Este proyecto ofrece capacidades completas de R, esto no es lo que estoy buscando. Estoy buscando algo que pueda facilitar la entrega de variables de PHP a R y R a PHP en un servidor Apache. –

2

Otra opción es Rserve. Le permite llamar a R desde cualquier idioma que admita socket TCP.

+1

No del todo, también necesita un cliente que hable el protocolo Rserve. Simon nos ha dado clientes Java y C++ y AFAIK no existe para PHP. Dicho esto, Rserve es muy útil y bastante poco apreciado. –

+0

Eso es parte del problema, no sé Java. De lo contrario, esta sería probablemente mi solución. –

2

Sí, R in mediawiki logra esto muy bien, y es de código abierto para que pueda ver cómo lo hicieron.

He jugado mucho con la fuente, es muy simple y no debería demorar mucho en adaptarla.

Por supuesto que no puede usarlo tal cual, a menos que tenga previsto utilizar mediawiki en su servidor también. Además, ten cuidado con la seguridad.

+0

Esto definitivamente parece interesante ... Parece que no puedo hacer que funcione en ninguno de los servidores a los que tengo acceso :( –

3

Respuestas de otra parte:

  1. RApache parece ser relevante: http://biostat.mc.vanderbilt.edu/rapache/. Integra R con servicio web en forma de un módulo Apache. Está disponible como una imagen de VMWare, por lo que puede probarlo sin problemas. Jeroen Ooms desarrolló algunas increíbles aplicaciones web basadas en RApache: http://www.stat.ucla.edu/~jeroen/

  2. Otra solución para la integración de PHP, Apache y R podría estar utilizando una de las soluciones de servicios web R como statconnWS o rsoap. Esto tiene la ventaja de poder luego simplemente separar el servidor web y la computadora que ejecuta R. La sobrecarga de cómputo no debe ser demasiado grande.

+0

... y me aseguro de que tienes la instalación del paquete 'brew' - entonces puedes pase el código R dentro de las etiquetas '<%' and '%> '. – aL3xa

-1

una manera muy simple

se puede pasar variables usando argumento

cada ejecutivo de tiempo ("RSCRIPT yourRscript.R ") se pasan argumentos en ese

por ejemplo

exec ("RSCRIPT yourRscript.R arg1 arg2 arg3")

continuación yourRscript puede cargar estos Agrus mediante el uso de argumentos < - commandArgs()

esperanza un amable ~

3

Aquí es una librería PHP que podría ayudar:

https://github.com/kachkaev/php-r

use Kachkaev\PHPR\RCore; 
use Kachkaev\PHPR\Engine\CommandLineREngine; 

$r = new RCore(new CommandLineREngine('/usr/bin/R')); 
$result = $r->run('1 + 1'); 
echo $result; 

Esta es la salida:

> 1 + 1 
[1] 2 

La biblioteca también está disponible como Symfony2 bundle.