{"word_count": 395, "character_count": 7011}
Le package Shiny permet assez facilement et assez rapidement de construire des applications Web utilisant R comme moteur de calcul. Dans cet exemple (accessible ici : http://riate.shinyapps.io/matrixes/) il s'agit de construire une application qui transforme des données de flux ou de lien d'une forme tabulaire à une forme matricielle :et d'une forme matricielle à une forme tabulaire :Ici l'application est hébergée directement sur les serveurs de ShinyApps (service en alpha proposé par RStudio), mais il est tout à fait possible, bien que plus complexe, d'héberger soi même les applications.Accès à l'application : http://riate.shinyapps.io/matrixes/Fichiers dans les deux formats pour tester l'application : ijfij.txt et mat.txtLa construction des applications Shiny est composée de deux parties : un fichier ui.R qui gère l'interface et un fichier server.R qui gère les calculs.le fichier ui.R :shinyUI&#040;  pageWithSidebar&#040;    # Header:    headerPanel&#040;&#34;Convertisseur de matrices&#34;&#041;,&#160;# Input in sidepanel:    sidebarPanel&#040;      # choix de la transformation      radioButtons&#040;&#34;trans&#34;, &#34;Quelle transformation :&#34;,                   list&#040;&#34;i j fij =&#62; matrice&#34; = &#34;t1&#34;,                        &#34;matrice =&#62; i j fij&#34; = &#34;t2&#34;&#041;                   &#041;,    #import file      fileInput&#040;&#34;file&#34;, &#34;Import du fichier&#34;&#041;,      p&#040;textOutput&#040;&#34;dwld&#34;&#041;,&#34;lignes importées&#34;&#041;,&#160;  #affichag du dwld button       conditionalPanel&#040;        condition = &#34;output.dwld&#34;,        h6&#040;&#34;Export du fichier&#34;&#041;,        downloadButton&#040;'downloadData', 'Download'&#041;        &#041;      &#041;,# Main:    mainPanel&#040;      htmlOutput&#040;&#34;test&#34;&#041;,      htmlOutput&#040;&#34;tin&#34;&#041;,      tableOutput&#040;&#34;table&#34;&#041;,      htmlOutput&#040;&#34;tout&#34;&#041;,      tableOutput&#040;&#34;table2&#34;&#041;    &#041;  &#041;&#041;le fichier server.R :shinyServer&#040;  function&#040;input, output&#041; &#123;    Dataset &#60;- reactive&#040;&#123;      if&#040;input$trans==&#34;t1&#34;&#041;&#123;        text&#60;-&#34;&#60;p&#62;&#60;img src='fijtomato.png' width=300/&#62;&#60;/p&#62;&#34;        if &#040;is.null&#040;input$file&#041;&#041; &#123;          df &#60;- data.frame&#040;&#041;          df2 &#60;- data.frame&#040;&#041;          dfr &#60;- data.frame&#040;&#041;          df2r &#60;- data.frame&#040;&#041;          tin&#60;-&#34;&#34;          tout&#60;-&#34;&#34;          dwld&#60;-0        &#125;else&#123;        df &#60;- as.data.frame&#040;read.table&#040;input$file$datapath,                                       header=TRUE&#041;&#041;        names&#040;df&#041;&#60;-c&#040;&#34;i&#34;,&#34;j&#34;,&#34;fij&#34;&#041;        library&#040;&#34;reshape2&#34;&#041;        df2 &#60;- as.data.frame&#040;dcast&#040;df,i~j,value.var=&#34;fij&#34;&#041;&#041;        names&#040;df2&#041;&#091;1&#093;&#60;-&#34;&#34;        #gestion overview        tin&#60;-&#34;Input overview (max 10 rows)&#34;        tout&#60;-&#34;Output overview (max 10 rows and 10 columns)&#34;        if &#040;dim&#040;df&#041;&#091;1&#093;&#62;10&#041;&#123;nl1&#60;-10&#125;else&#123;nl1&#60;-dim&#040;df&#041;&#091;1&#093;&#125;        if &#040;dim&#040;df&#041;&#091;2&#093;&#62;10&#041;&#123;nc1&#60;-10&#125;else&#123;nc1&#60;-dim&#040;df&#041;&#091;2&#093;&#125;        dfr&#60;-df&#091;1:nl1,1:nc1&#093;        if &#040;dim&#040;df2&#041;&#091;1&#093;&#62;10&#041;&#123;nl1&#60;-10&#125;else&#123;nl1&#60;-dim&#040;df2&#041;&#091;1&#093;&#125;        if &#040;dim&#040;df2&#041;&#091;2&#093;&#62;10&#041;&#123;nc1&#60;-10&#125;else&#123;nc1&#60;-dim&#040;df2&#041;&#091;2&#093;&#125;        df2r&#60;-df2&#091;1:nl1,1:nc1&#093;        dwld&#60;-nrow&#040;df&#041;        &#125;      &#125;      else &#123;        text&#60;-&#34;&#60;p&#62;&#60;img src='mattofij.png' width=300/&#62;&#60;/p&#62;&#34;        if &#040;is.null&#040;input$file&#041;&#041; &#123;          df &#60;- data.frame&#040;&#041;          df2 &#60;- data.frame&#040;&#041;          dfr &#60;- data.frame&#040;&#041;          df2r &#60;- data.frame&#040;&#041;          tin&#60;-&#34;&#34;          tout&#60;-&#34;&#34;          dwld&#60;-0        &#125;else&#123;          df &#60;- as.data.frame&#040;read.table&#040;input$file$datapath,                                         header=TRUE,                                         row.names=NULL&#041;&#041;          library&#040;&#34;reshape2&#34;&#041;          df2 &#60;- melt&#040;df,id.vars=1,variable.name=&#34;j&#34;,                      value.name=&#34;fij&#34;&#041;          names&#040;df2&#041;&#091;1&#093;&#60;-&#34;i&#34;          names&#040;df&#041;&#091;1&#093;&#60;-&#34;&#34;          #gestion overview          tin&#60;-&#34;Input overview (max 10 rows and 10 columns)&#34;          tout&#60;-&#34;Output overview (max 10 rows)&#34;          if &#040;dim&#040;df&#041;&#091;1&#093;&#62;10&#041;&#123;nl1&#60;-10&#125;else&#123;nl1&#60;-dim&#040;df&#041;&#091;1&#093;&#125;          if &#040;dim&#040;df&#041;&#091;2&#093;&#62;10&#041;&#123;nc1&#60;-10&#125;else&#123;nc1&#60;-dim&#040;df&#041;&#091;2&#093;&#125;          dfr&#60;-df&#091;1:nl1,1:nc1&#093;          if &#040;dim&#040;df2&#041;&#091;1&#093;&#62;10&#041;&#123;nl1&#60;-10&#125;else&#123;nl1&#60;-dim&#040;df2&#041;&#091;1&#093;&#125;          if &#040;dim&#040;df2&#041;&#091;2&#093;&#62;10&#041;&#123;nc1&#60;-10&#125;else&#123;nc1&#60;-dim&#040;df2&#041;&#091;2&#093;&#125;          df2r&#60;-df2&#091;1:nl1,1:nc1&#093;          dwld&#60;-nrow&#040;df&#041;        &#125;      &#125;      return&#040;list&#040;df=df,df2=df2,dwld=dwld,text=text,tin=tin,                  tout=tout,dfr=dfr,df2r=df2r&#041;&#041;    &#125;&#041;&#160;&#160;#gestion de l'affichage des images des transformations    output$test &#60;- renderText&#040;&#123;      Dataset&#040;&#041;$text    &#125;&#041;&#160;&#160;#gestion de l'affichage des headers input/output et de #l'affichage des tables    output$tin &#60;- renderText&#040;&#123;      Dataset&#040;&#041;$tin    &#125;&#041;           output$table&#60;-renderTable&#040;&#123;      Dataset&#040;&#041;$dfr    &#125;,include.rownames=FALSE&#041;       output$tout &#60;- renderText&#040;&#123;      Dataset&#040;&#041;$tout    &#125;&#041;     output$table2&#60;-renderTable&#040;&#123;      Dataset&#040;&#041;$df2r    &#125;,include.rownames=FALSE&#041;&#160;#gestion du download     output$dwld &#60;- reactive&#040;&#123;     Dataset&#040;&#041;$dwld      &#125;&#041;&#160;    output$downloadData &#60;- downloadHandler&#040;     filename = function&#040;&#041; &#123;       paste&#040;&#34;output&#34;,input$file, sep=''&#041;     &#125;,     content = function&#040;zile&#041;&#123;        write.table&#040;Dataset&#040;&#041;$df2,sep=&#34;\t&#34;,dec=&#34;.&#34;,quote=FALSE,                   row.names=FALSE,zile&#041;&#125;   &#041;  &#125;&#041;