IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PHP & R, exécution script R via la fonction exec() de PHP


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Par défaut PHP & R, exécution script R via la fonction exec() de PHP
    Bonjour tout le monde,

    je cherche a exécuter un script R via la fonction exec() de PHP, le script en lui-même fonctionne mais pas quand je lance la page web. Je n'ai pas le temps de me lancer dans des packages R du genre Rapach ou Shiny car je dois trouver une solution simple rapidement. Si quelqu'un aurai juste l'ombre d'une idée de ce que je devrais creuser pour que mon script marche je lui serait éternellement reconnaissant.

    En tout cas je remercie les personnes qui auraient au moins le temps de lire ma requête !


    Voici le script R :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    # Script qui contient l'accès à la base de données ath_exp pour différentes gènes et différentes options (tissue...) mais aussi different choix de datasets :
    # Création du heatmap et de la matrice de corrélation pour un gène contre tout les autres gènes :
    #R CMD BATCH --no-save --no-restore '--args gene_list=c("At3g21770","At5g12250") dataset=\"Seed_Serie\" tissue=c("seed","embryo")' test_rcmd.r test_rcmd.out &
     
    library(RMySQL)
     
    args=(commandArgs(TRUE))
    # pour récuperer les arguments : options[1], options[2] etc
    if(length(args)==0){
      print("No arguments supplied.")
      ##supply default values
      dataset = c(1,2)
    #~   tissue = c(1,1,1)
      gene_list=c(1,1)
    }else{
      for(i in 1:length(args)){
        eval(parse(text=args[[i]]))
      }
    }
    print(gene_list)
    print(dataset)
    #~ print(tissue)
     
    con <- dbConnect(MySQL(), user="root", password="n337042m", dbname="mydb", host="localhost")
     
    i=0;
    for (gene in gene_list) {
      query= dbSendQuery(con, paste ("SELECT distinctrow P.SAMPLE_SUFFIX, P.MEAN_REP as ",gene," FROM ",dataset," D, Processed_Data_Table P, Summary_Tables S WHERE S.NAME_TABLE = '",dataset,"' AND S.ID_TABLE = P.ID_TABLE AND D.IDGENE_AT LIKE '%",gene,"%' AND P.ID_MEAN_REP = D.ID_MEAN_REP ORDER BY P.SAMPLE_SUFFIX",sep=""))
      dbGetStatement(query) # pour afficher la requête
      exp_data <- fetch(query, n = -1) # -1 pour avoir toutes les lignes sinon limité à 500
      dbClearResult(query);
      #write.table(exp_data, file=gene, sep= "\t")
     
     
      if (i==0) {
        list_data = assign(paste("exp_data_", gene, sep=""),exp_data)
      }
      else {
        # génération de variables pour chaque sortie de requête
        gene_data = assign(paste("exp_data_", gene, sep=""),exp_data)
        list_data = merge(list_data, gene_data)
      }
      i=i+1;
    }
     
    class(list_data)
    list_data=data.frame(list_data, row.names=1)
     
    # Calcul de la matrice de distance de corrélation :
    corrdist =function(x) as.dist(1-cor(t(x)))
     
    #~ source("http://bioconductor.org/biocLite.R")
    #~ biocLite("NMF")
     
    library("NMF")
    #~ setwd("~/Documents/Stage_M2/R/Heatmap/Annotations")
    annot = as.data.frame(t(read.table("./Annotations/Seed_Serie_annotation.txt", header=TRUE, sep="\t",row.names=1, comment.char="")))
    ann_color=list(category=c(1:20), age=c(1:10), tissue=c(1:10), control=c(1:2), mutant=c(1:20), timecourse=c(1:20));
     
    png("test_heatmap.png", width=1000, height=1000)
    aheatmap(t(data.matrix(list_data)), annCol=annot, distfun =corrdist , hclustfun='ward', verbose = TRUE, Colv=NA, annColors=ann_color)
    dev.off();

    et le bout de code php qui devrait exécuter le script R :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cmd= "/usr/bin/R CMD BATCH --no-restore '--args gene_list=\"".$_POST['gene_ID']."\" dataset=\"".$_POST['dataset']."\" ' test_rcmd.r test_rcmd.out ";
    echo $cmd;		
    exec($cmd);
    echo("<img src='test_heatmap.png' >");


    Ces deux fichiers se trouvent dans le même répertoire !


    Mél

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 672
    Par défaut
    essaye ce code pour voir le résultat de la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    exec($cmd, $resultat);
    var_dump($resultat);
    exit();

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Par défaut
    Le résultat est :
    C'est mauvais non ?

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/03/2015, 20h42
  2. fonction exec en php
    Par clairetj dans le forum Langage
    Réponses: 3
    Dernier message: 14/10/2013, 00h15
  3. Exécuter script js dans une fonction
    Par Khleo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/06/2012, 16h00
  4. Exécuter script MATLAB via Java -> Conseils ?
    Par nanath02 dans le forum MATLAB
    Réponses: 1
    Dernier message: 06/01/2011, 10h26
  5. [Mail] envoi d'un mail via la fonction mail() de php
    Par Abac_Angelique dans le forum Langage
    Réponses: 1
    Dernier message: 09/02/2009, 23h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo