2016-01-06 133 views
1

在反應更新的previous問題@NicE幫助我瞭解它如何工作。不過,這裏還有另一個問題。根據我的代碼(以下內容),每次更改radioButtons窗口小部件時,即使我不想要,selectInput窗口小部件中的值也會自動回到id的值。例如,當我更改L1 - >L3,然後更改Ordering - >Part name,然後我想要轉到L3 - >L2,selectInput小部件會自動回到Ordering。我知道它爲什麼會發生,但有沒有解決方案來避免這種自動化(如果它當然不是必要的 - 儘管在L3 - >L1中不可避免)。謝謝!閃亮應用程序的反應更新 - 單向依賴

ui.R

library(shiny) 

shinyUI(
     fluidPage(
       fluidRow(
         column(3, 
           selectInput('prod','', prod), 
           radioButtons('level','',level, level[1]), 
           uiOutput('in_xvar') 
         ), 
         column(9, 
           ggvisOutput('ggvis_plot') 
         ) 
       ) 
     )) 

server.R

library(shiny) 
library(ggvis) 
library(dplyr) 


shinyServer(function(input, output) { 

     data0 <- reactive({ 
       df <- test_data 
       df <- df %>% 
         filter(prod == input$prod) 
     }) 

     data <- reactive({ 
       df <- data0() 
       df <- df %>% 
         filter(level == input$level) 
     }) 

     output$in_xvar <- renderUI({ 
       choosen_list <- axis_x[input$level] 
       selectInput('xvar','', choosen_list) 
     }) 

     ggvis_plot <- reactive({ 
       if (is.null(input$xvar)) 
         x <- prop('x', as.name("id")) 
       else 
         x <- prop('x', as.name(input$xvar)) 

       plot <- data() %>% 
         ggvis(x, ~value) %>% 
         layer_points(fill = ~part) 
     }) 

     ggvis_plot %>% bind_shiny('ggvis_plot') 
}) 

global.R

prod <- c('P1','P2','P3') 
level <- c('L1','L2','L3') 
part <- c('p1','p2','p3','p4','p5') 

axis_x <- list(L1 = list('Ordering' = 'id'), 
       L2 = list('Ordering' = 'id', 'Part name' = 'part'), 
       L3 = list('Ordering' = 'id', 'Part name' = 'part')) 

set.seed(123) 
test_data <- data.frame(prod = sample(prod,300, replace = T), 
      level = sample(level, 300, replace = T), 
      part = sample(part, 300, replace = T), 
      value = rnorm(300)) 

test_data <- test_data %>% 
     group_by(prod) %>% 
     mutate(id = 1:n()) %>% 
     arrange(prod, id) 
+0

您可以隔離使用功能分離() HTTP調用://光澤。 rstudio.com/articles/isolation.html – CAFEBABE

+0

是的,我意識到這一點,但在這種特殊情況下,我不知道該怎麼做。我嘗試了幾個選項。問題更復雜,因爲'selectInput'小部件依賴於'input $ level'。 – Nicolabo

回答

1

我不知道我是否理解喲你的問題還沒完全。 但如果問題是,一旦你選擇另一個單選按鈕,第三個下拉框中切換其價值,此代碼應幫助

output$in_xvar <- renderUI({ 
    choosen_list <- axis_x[input$level] 
    selectInput('xvar','', choosen_list,selected=input$xvar) 
}) 
+1

太簡單了!輝煌,更簡單的解決方案更好:)我尋找更復雜的方法。謝謝! – Nicolabo

+0

我也嘗試了一些更復雜的方法;) – CAFEBABE