2015-10-11 109 views
0

我想提供inputselect依赖上传的文件(fileInput)的“选择”。在下面的示例中,我想要as.list(mydata[1, 1:5])作为输入选择选项的值。稍后,子集值将是动态的,不会在此显示。闪亮:更新inFile的更改selectinput

enter image description here

我试图在论坛提出了若干方案(反应,观察,reactiveValue及其组合),但没有成功。

我的脚本部分运行,但是我需要刷新页面以获取上传的“选项”并重新加载文件。

server.R

shinyServer(function(input, output, session) { 

output$contents <- renderDataTable({ 

    inFile <<- input$SoftRecom 
    if (is.null(inFile)) 
     return(NULL) 
    filedatapath <<- reactive({inFile$datapath}) 
    mydata <<- read.csv(filedatapath(), header = TRUE, sep = ',') 
    mydata 
}) 


mychoices <<- reactive({ 
    mydata 
    print(mydata) 
    }) 

output$vg <- renderUI({ 
    selectInput("vg", label = p("goal", style = "color:#FFA500"), 
     mychoices()[1,1:5], selected = 1) 
}) 

output$vp <- renderUI({ 
    selectInput("procedure", label = p("procedure", style = "color:#FFA500"), 
       choices = c("proecudures"), selected = 1) 

}) 

output$vm <- renderUI({ 
    selectInput("procedure", label = p("procedure", style = "color:#FFA500"), 
       choices = c("ChIP-seq"), selected = 1) 

}) 
}) 

ui.R

shinyUI(fluidPage(theme = "bootstrap.css", 
titlePanel("simple software recommendation sytem"), 
sidebarLayout(
    sidebarPanel(
     fileInput('SoftRecom', 'choose dataset'), 

     uiOutput("vg"), # variable goal 
     uiOutput("vp"), # variable procedure 
     uiOutput("vm") # variable method 


    ), 
    mainPanel(
     dataTableOutput('contents') 
    ) 
) 
)) 

我见过很多例子,在论坛的答案,非常接近(甚至匹配),我的问题。对不起,因为太钝了。如果有人能指出我的问题,我会非常感激。

Jay

回答

0

最终我自己找到了解决方案。不要因为我的问题和答案中的不同服务器代码而感到困惑。只要看看

  • uiOutput( 'pipelinestep')和
  • 输出$ pconst < <之间的关系 - renderUI({selectizeInput( 'pconst', '构建软件的工作流程',选择= as.character( mysoft [mysoft $目标== mypipefilter,3]), 多个= TRUE,选项=名单(maxItems = 1))}

UI.R

我不得不插入:uiOutput(“pipelinestep “)看到一行8

shinyUI(fluidPage(theme = "bootstrap.css", 
titlePanel(h2("simple software recommendation system", style = "color:#FFA500")), 
    sidebarLayout(position = "left", 
     sidebarPanel(width =3, 
      # chose standard pipeline 
      selectInput("selectpipe", "select standard pipeline:", choices = pipechoices), 
      # software details 
      *uiOutput("pipelinestep")*, # software per pipeline step, 
      # construct software workflow based on selected pipeline step 
      uiOutput("pconst") 
     )))) 

server.R

看到从管线5〜7“的选择”,即会检测到改变分配新值。请参阅文档:http://shiny.rstudio.com/articles/dynamic-ui.html

pipelinestepsoftInput <<- reactive({ 
    mypipefilter <- input$pipelinestep 
    softperpipe <<- mysoft[mysoft$goal==mypipefilter ,c(1,3,5:7), drop = FALSE] 
    ## provides software choices related to the pipeline step 
    output$pconst <<- renderUI({selectizeInput(
     'pconst', 'construct software workflow', choices = as.character(mysoft[mysoft$goal==mypipefilter, 3]), 
     multiple = TRUE, options = list(maxItems = 1))}) 
    ## input for outputDataTable 
    softperpipe 
    })