2017-06-23 40 views
2

我想包括在一個閃亮的應用程序應該繪製圖形複選框。 我的問題似乎很簡單,但我一直無法自己解決:(儘管有多個CheckboxGroupInput問題在StackOverflow或R幫助工具...checkboxGroupInput在R閃存ggplot使用

所以,我有一個科學研究,包括8篇散文命名爲1到8)和5個控制文章(命名爲PC1到PC5)。 我希望我的應用程序可以通過複選框詢問您想要查看的文章,並在同一圖形中繪製它們。 請注意我已經有一個你想這兩個變量看(2個顯卡),並且這工作就像一個魅力下拉菜單要價

這裏是我的用戶界面的簡化版本:

ui <- dashboardPage(
    dashboardHeader(title="Test", 
       dropdownMenu(type = "notifications", 
          notificationItem(
          text = "Verifier les points centraux", 
          icon = icon("exclamation-triangle"), 
          status = "warning" 
          ) 
      )    
), 
    dashboardSidebar(
    sidebarMenu(
    menuItem("Suivi par Variable", tabName = "SuiviVariable", icon = 
icon("area-chart")) 
) 
), 
    dashboardBody(
    # Suivi par Variable tab content 
    tabItem(tabName = "SuiviVariable", 
      h2("Graphique de Suivi pour Chaque Variable d'Intérêt"), 
      fluidRow(
      box(title = "Choisir deux variables à comparer", status = 
"info",br(), 
       selectInput("Variable1", label = "Variable 1", 
          choices = list_variables, 
          selected = list_variables[1]), 
       selectInput("Variable2", label = "Variable 2", 
          choices = list_variables, 
          selected = list_variables[1]), 
       checkboxGroupInput("Essais", "Essais à afficher :",c(1:8,"PC1", "PC2", "PC3", "PC4", "PC5")), 
       plotOutput("plot5", height = 600), 
       plotOutput("plot6", height = 600) 
      ) 
     ) 
) 
)) 

用戶界面部分似乎沒問題,因爲複選框顯示正確。

這裏是服務器的一部分:

server<-function(input, output){ 
     output$plot5 <- renderPlot({ 
    a<- as.vector(input$Essais) 
    dataTest <- as.data.frame(TrameTest[a,]) 
    ggplot(data=dataTest, aes(x= N_ByEssai,y=dataTest[,input$Variable1], group= Nom, colour=Nom))+ 
    geom_line()+ 
    xlab("Duree de l'Essai")+ 
    ylab(input$Variable1) 
    }) 
    output$plot6 <- renderPlot({ 
    dataTest <- as.data.frame(TrameTest[input$Essais,]) 
    ggplot(data=dataTest, aes(x= N_ByEssai,y=dataTest[,input$Variable2],group= Nom, colour=Nom))+ 
    geom_line()+ 
    xlab("Duree de l'Essai")+ 
    ylab(input$Variable2) 
    })} 

在那裏,你可以看到我已經嘗試過使用輸入$ Essais,是徒勞的。 我讀過CheckboxGroupOutput返回一個字符矢量,我覺得它可能是我的問題,所以我試圖用as.vector來欺騙它,但它不會改變結果: 根據所選框的不同,我會得到一個空白的圖形或一個帶有圖例PC1/NA的圖形,以及一個僅在我無法識別的值的行(?!)。

你知道我爲什麼不能使用TrameTest [輸入$ Essais]作爲我的x值嗎?是因爲它不是矢量嗎? 你有沒有simle(我對R還不是很好)可以用作參考的CheckboxGroupInput的例子?

在此先感謝您的時間和想法

回答

0

我發現了一些可行的東西! 在服務器部分,我首先對我的數據框(TrameTest)進行子集化,只保留名稱與輸入$ Essais相對應的行。 然後,情節很簡單,使用我的子集數據框(dataTest)。

output$plot5 <- renderPlot({ 
dataTest<-subset(TrameTest, TrameTest[,2] %in% input$Essais) 
ggplot(data=dataTest, aes(x= N_ByEssai,y=dataTest[,input$Variable1], group = Nom, colour=Nom))+ 
    geom_line()+ 
    xlab("Duree de l'Essai")+ 
    ylab(input$Variable1) 
    }) 
0

您的問題不是閃亮,而是對選擇的誤解。

TrameTest[input$Essais,] 

檢查它是否找到對應於input$Essais的rownames並選擇這些行。但是從你的代碼和你自己的回答可以清楚的看到你想要的那些行在input$Essais出現在第二列。這是完全不同的,從rownames必須是唯一的,而你的新代碼允許多次發生input$Essais開始。

這就是說,使用subset()內部功能在?subset勸針對:

這是旨在用於交互地一個便利函數。對於 編程,最好使用標準子集函數,如 [,特別是參數子集 的非標準評估可能會有意想不到的後果。

所以有最佳的代碼,這樣做:

output$plot5 <- renderPlot({ 
    id <- TrameTest[, 2] %in% input$Essais 
    dataTest <- TrameTest[ id , ] 
    ggplot(data=dataTest, aes(x= N_ByEssai,y=dataTest[,input$Variable1], group = Nom, colour=Nom))+ 
    geom_line()+ 
    xlab("Duree de l'Essai")+ 
    ylab(input$Variable1) 
    }) 
+0

謝謝你的建議! – AUB