2016-09-20 3 views
0

В процессе создания некоторых реактивных выражений с Shiny in R и с некоторой помощью сообщества я могу получить реактивные результаты с помощью текста. Я заинтересован в передаче цифр, которые соответствуют тексту через профили. В приведенном ниже примере у меня есть вход «myImage» в mainPanel в ui. На стороне сервера я пытаюсь вызвать naomi.png для определенного условного оператора, который соответствует профилю 3. Идея состоит в том, чтобы иметь один .png, связанный с каждым #Profile X, который вызывается на стороне сервера, учитывая профиль объекта ». Любые указатели/стартеры будут оценены.Передача реактивных фигур в Shiny

ui<-(fluidPage(
     titlePanel("Diagnostic Elementary Reading fluency Profile (DERP) App"), 

       sidebarLayout(
       sidebarPanel(
       helpText("Enter Fluency Scores"), 
       sliderInput(inputId="fluency1", label="Fall FSF",value=25,min=0,max=50), 
       sliderInput(inputId="fluency2", label="Fall LNF",value=25,min=0,max=50) 
       ), 
       mainPanel(img(src="myImage",height=300,width=400), 
          h1(textOutput("stuff")),align="center")) 
       ) 
) 


server<-function(input,output) { 
    profile <- reactive({ 
     if ((input$fluency2<20.5)) { 
     tmp <- "Profile 1" 
     } 
     if((input$fluency1<12) & ((input$fluency2>20)) & (input$fluency2<23)) { 
     tmp <- "Profile 1" 
     } 
     if((input$fluency1<9) & ((input$fluency2>21)) & (input$fluency2<25)) { 
     tmp <- "Profile 1" 
     } 

     #PROFILE 2 
     if ((input$fluency1>11)) { 
     tmp <- "Profile 2" 
     } 
     if(((input$fluency1>8) & (input$fluency1<28)) & ((input$fluency2>22) & (input$fluency2<25))) { 
     tmp <- "Profile 2" 
     } 
     if((input$fluency1<28) & ((input$fluency2>24))) { 
     tmp <- "Profile 2" 
     } 

     #PROFILE 3 
     if((input$fluency1>27) & ((input$fluency2>23))) { 
     tmp <- "Profile 3" 
     } 
     tmp 

    }) 


    output$stuff <- renderText({ 
     profile() 
    }) 
    output$myImage<-renderImage({ 
     if((input$fluency1>27) & ((input$fluency2>23))) { 
     return(list(
      src = "www/naomi.png", 
      contentType = "image/png", 
      alt = "naomi!"))} 
    }) 

} 
shinyApp(server=server,ui=ui) 
+0

Я признаю, что я просто прикрываю его здесь, и у меня не было возможности попробовать это. Не можете ли вы создать реактивную функцию, которая возвращает строку (например, «www/naomi.png») на основе ряда условных выражений или операторов? – Adrian

+0

Насколько я понимаю, вы хотите отобразить существующие файлы png или хотите создать png на лету с помощью renderImage()? –

+0

Я хотел бы показать 3 отдельных файла png, которые уже существуют; один из которых связан с каждым профилем. –

ответ

0

Это одно из возможных решений. Я тестировал его с тремя файлами (profile1.png, profile2.png, profile3.png). Поместите изображения в папку www. Он использует созданный ранее профиль(), чтобы собрать имя файла изображения. Это код:

ui<-(fluidPage(titlePanel("testapp"), 
        sliderInput(inputId="fluency1", label="Fall FSF",value=25,min=0,max=200), 
        sliderInput(inputId="fluency2", label="Fall LNF",value=25,min=0,max=200), 
        mainPanel(h5("Groupings"), 
          textOutput("stuff"), 
          uiOutput("image")))) 


    server<-function(input,output) { 

      profile <- reactive({ 
        if ((input$fluency2<20.5)) { 
          tmp <- "Profile 1" 
        } 
        if((input$fluency1<12) & ((input$fluency2>20)) & (input$fluency2<23)) { 
          tmp <- "Profile 1" 
        } 
        if((input$fluency1<9) & ((input$fluency2>21)) & (input$fluency2<25)) { 
          tmp <- "Profile 1" 
        } 

        #PROFILE 2 
        if ((input$fluency1>11)) { 
          tmp <- "Profile 2" 
        } 
        if(((input$fluency1>8) & (input$fluency1<28)) & ((input$fluency2>22) & (input$fluency2<25))) { 
          tmp <- "Profile 2" 
        } 
        if((input$fluency1<28) & ((input$fluency2>24))) { 
          tmp <- "Profile 2" 
        } 

        #PROFILE 3 
        if((input$fluency1>27) & ((input$fluency2>23))) { 
          tmp <- "Profile 3" 
        } 
        tmp 

      }) 
      output$stuff <- renderText({ 
        profile() 
      }) 
      output$image <- renderUI({ 
        fileName <- tolower(gsub(" ", "", profile(), fixed = TRUE)) 
        tags$div(img(src = paste0(fileName, ".png"))) 
      }) 
    } 


    shinyApp(server=server,ui=ui) 
Смежные вопросы