2011-01-27 16 views
12

Soy relativamente nuevo en R y muy nuevo en la línea de comandos de Linux (Ubuntu). Intento escribir una página en PHP que contenga un comando que me gustaría ejecutar en R y luego pasar los resultados para poder trabajar con ellos. He intentado variaciones del código de abajo, pero solo me dan el mensaje de bienvenida R como mi producción:Uso de R a través de PHP

<?php 

$rQuery = "\"echo 3 + 1;\" | /usr/bin/R --no-save"; 
exec($rQuery, $output); 
print_r($output); 

?> 

Cuando escribo manualmente $ RQUERY en la línea de comandos, el resultado es lo que se espera: [1] 4.
Sé que debo estar perdiendo algo hacia el final, pero no he podido averiguarlo a través de mi propia búsqueda.

Respuesta

11

par de puntos:

  1. ¿Quieres --slave como la opción, que implica --no-save y convierte el saludo fuera; ver el manual para más.

  2. Lo que realmente quieres es de Jeff Horner excelente R-dentro-Apache, ver here for more. También puede usar marcos de plantillas como brew. Lo mejor de todo, Jeff ahora proporciona un paquete .deb para usted: use deb http://ppa.launchpad.net/jeffreyhorner/rapache/ubuntu lucid main en /etc/apt/sources.list.

  3. Si insiste en las tuberías de php, considere la interfaz de scripting littler que Jeff y yo escribimos. Se pondrá en marcha más rápido que R.

+1

1. ¡Gracias! No tienes idea de cuánto me molestaba. 2. Esto se ve muy útil, lo investigaré una vez que mejore en todo esto. 3. Esto es exactamente lo que estaba buscando. ¡Gracias por escribirlo! En caso de que alguien más tenga curiosidad, pude obtener el resultado exacto que estaba buscando usando: " " – crix

+0

Placer. Littler (por ejemplo, '/ usr/bin/r') inicia su instancia de R incorporada con esa opción por la misma razón. –

+1

Disculpe por el formato de arriba aún aprendiendo SO también! – crix

1

Cualquiera que sea el usuario de apache que se esté ejecutando, puede no tener las mismas variables de entorno, o permisos que cuando lo ejecutó desde el shell a mano. Averigüe en qué usuario se ejecuta Apache y asegúrese de que tenga los permisos correctos y las variables de entorno.

+0

Gracias, comencé a encontrarme con este problema al intentar comandos más complejos en R. – crix

6

Por algo este sencillo, ni siquiera debería usar PHP, porque puede hacerlo únicamente con RApache, brew paquete y HTML plano (CSS/JS son opcionales). Simplemente lea the RApache manual y vea Jeroen Ooms 'video tutorial. También debe leer el manual brew. ¡Jeff realmente hizo un gran trabajo!

En pocas palabras, usted sólo tiene que configurar apache2.conf o archivo .htaccess. En lugar de utilizar las directivas <Directory> o <Location>, puede usar la directiva <FilesMatch> para que pueda hacer coincidir los archivos con regexpr. He aquí una muestra .htaccess:

<FilesMatch "^.+\.rhtml$"> 
    SetHandler r-script 
    RHandler brew::brew 
</FilesMatch> 

que utilizar la extensión de archivo especial .rhtml donde mezclo con la sintaxis HTML R dentro <% y %> etiquetas (ver brew documentación). No utilicé brew con PHP, porque HTML hizo el truco con brew.

De todos modos, usted ha dicho que desea:

escribir una página en PHP que contiene un comando me gustaría ejecutar en I y luego pasar los resultados a ser capaz de trabajar con ellos

  • sobre la ejecución de comandos de entrada del usuario ... bueno ... no lo hacen! ¡Especialmente no permita que los usuarios ejecuten comandos personalizados porque pueden pasar fácilmente los comandos system o file.* y arruinar su sistema! Puede usar AppArmor, pero es todavía un largo camino hacia abajo ...
  • enfoque en formularios HTML simples y utilizar POSTAL, GET, GALLETAS, ARCHIVOS y SERVIDOR variables que RApache proporciona y a continuación, manipular entradas dentro de la secuencia de comandos R
  • sobre "pasar los resultados de nuevo", puede utilizar XML paquete R, o rjson (mi favorito, y lo recomiendo). Luego puede pasar el objeto R a la función toJSON y deserializarlo con JavaScript. Por supuesto, eso es cierto solo si sus clientes son navegadores web, de lo contrario, si usted quiere, digamos, pasar alguna información al sistema integrado, debe usar el estándar XML -way
  • por algo tan simple, no lo hace necesita PHP. De todos modos, debe comunicarse con Jeroen, sé que usó algo de PHP en su aplicación Stockplot

Para cualquier otra duda, utilice RApache mailing list.

... y hola R-webdev world! =)

+0

Gracias. Estoy de acuerdo con lo que has dicho. Por lo que vale, no estoy planeando construir una aplicación web pública con esto: el servidor se ejecuta en una vm en mi escritorio y no está conectado a Internet. Está destinado a ser utilizado en nuestro departamento para automatizar algunas tareas repetitivas. Acabo de utilizar PHP porque ya lo sé y quería proporcionar una interfaz de navegador sencilla para que otros la usen. RApache se ve muy bien y planeo usarlo una vez que pase lo básico. – crix

+0

Eso está bien. RApache debería ser suficiente. Si desea interactuar con la sesión R de forma abierta, intente con Rserve. RApache ejecuta una nueva sesión R en cada solicitud HTTP, así que tenlo en cuenta. Simplemente no codifique HTML en el script R (con 'cat' o' print'), y trate de serializar/analizar sus datos en JSON/XML y unserialize/deparse con JS o lo que sea. Eso es más o menos ... ¡buena suerte! =) – aL3xa

Cuestiones relacionadas