带有selectInput的FileInput按钮,闪亮..!

时间:2017-04-14 08:33:30

标签: shiny rstudio

我正在尝试从我上传到应用程序的“car”数据集中获取速度变量。基本上在选择速度下:我希望所有数字都出现在数据集$ speed中。在selecInput下,选项应该取决于我使用fileInput上传的数据集。我该如何完成这项任务。现在我已经将选项添加为1,2,3。理论上应该存在汽车数据集的速度变量的所有值。

library(shiny)
library(datasets)
##the file I am uploading 
data(cars)
dataset=write.csv(cars, "dataset.csv")


ui=fluidPage( 

actionButton("upload", "Upload File"),
bsModal("uploadFile", " ", "upload", 
sidebarLayout(
sidebarPanel(
fileInput("file","Choose file to upload")

),
mainPanel(
tableOutput("contents")
)
)
),  



sidebarLayout(

sidebarPanel(

column(3, selectInput("selectElement", "Select speed:", c(1,2,3),multiple = 
T, selectize = F)

)
),

mainPanel(
)
)
)

server=function(input,output,session){

output$contents <- renderTable({

inFile <- input$file

if (is.null(inFile))
return(NULL)

read.csv(inFile$datapath)
})
}

shinyApp(ui,server)

1 个答案:

答案 0 :(得分:1)

我提前道歉,因为回复有点不完整:见下文。

首先,回答您的问题:

如果你有像汽车这样的数据集,要识别你可以做的“速度”标签:

labls <- unique(cars$speed)
...
selectInput("selectElement", "Select speed:", labls, multiple = 
                          T, selectize = F)

我希望发布一个完整的例子,但当前的逻辑(可能是因为发布了有限的代码?)似乎不正确:应用a)如何留给用户选择使用哪个文件;并且同时b)已经过滤速度? 当然,您可能计划显示具有所谓“速度”列的数据集,然后它会有意义:)

此外,但这不是您的问题的一部分,您似乎通过包装shinyBS使用模态对话。

由于版本0.14闪亮(2016年10月左右)闪亮有一个非常好的模态功能,我个人认为最好使用原生功能。

我想发布一个从您的代码派生的简单示例(但是注释掉了selectInput for speed,因为如上所述,它不会出现在发布的示例的上下文中。)

library(shiny)
library(datasets) 
data(cars)
dataset = write.csv(cars, "dataset.csv")  

labls <- unique(cars$speed) # I left this in the code

ui=fluidPage( 
  sidebarLayout(
  sidebarPanel(
         actionButton("upload", "Upload File") 
    ),

  mainPanel(tableOutput("contents") )
))
server=function(input,output,session){
# Show modal when button is clicked.
observeEvent(input$upload, {
  showModal(dataModal())
  })
dataModal <- function(failed = FALSE) {
  modalDialog(
    fileInput('inputId', label=NULL, multiple = FALSE, accept = NULL, width =      NULL, buttonLabel = "Browse...", placeholder = "No file selected")
# , selectInput("selectElement", "Select speed:", labls, multiple = 
#                               T, selectize = F)
  )
}  
output$contents <- renderTable({
if (length(input$inputId )== 0) return(NULL) 
    inFile <- input$inputId   
# if (is.null(input$selectElement )) return(NULL)    
input$inputId 
})
}

shinyApp(ui,server)