闪亮:更改选择输入的值

时间:2017-08-03 08:00:57

标签: r input shiny

我有几个包含n列坐标的输入文件,我怎么能设计一个闪亮的选择输入面板,我的选择是输入文件中的列数? 例如,一旦我读取了一个包含5个坐标文件的zipfile,在输出中我想说显示与文件1或文件2中的坐标相关的地图或...这意味着我的选择输入面板应该显示5个选项。 如果我读了一个包含100个文件的zipfile,我想下载100个选项! 我怎么能这样做?我查了this example但我不知道如何改编它!

这是我的代码示例。不幸的是,它不可重复,但降低了复杂性,易于理解:

ui <- fluidPage(

  fileInput("File","upload your file"),

  selectInput("Select1", "Select input",c())
  mainPanel(tags$head(tags$style(type="text/css", ".tab-content {overflow: visible;}")),
  leafletOutput("mymap"))
)

server <- function(input, output, session) {
  coor <- reactive( {infile=input$File

                    if (is.null(infile))
                      return(NULL)
                    temp_files <- unzip(infile$datapath)
                    T=length(temp_files)
                    A_new=c();for(i in 1:T){A_new[[i]]=c()}
                    for(i in 1:T){
                      .
                      .
                      .
                      A_new[[i]]= ...
                    }
                    result <- list(A_new=A_new,T=T);
                    return(result);

                })

  observe({
    x <- input$File
    if (is.null(x))
      x <- character(0)
    map=coor()
    updateSelectInput(session, "Select1",
                      label = paste("Select input label", map$T),
                      choices = map$A_new,
                      selected = tail(map$A_new, 1)
    )
  })
}
output$mymap <- renderLeaflet({
  infile=input$File
  if (is.null(infile))
    return(NULL)
  a2=coor()
  leaflet() %>%
    addProviderTiles("OpenTopoMap", group = "MapQuestOpen.Aerial") %>%
    addMarkers(data =a2$A_new[[1]],~long, ~lat, popup = ~as.character(mag), label = ~as.character(Name))%>% 

    addMeasure()
})

在反应函数中,我读取了我的文件,进行了计算并得到了A_new[[i]]文件,如下所示:

A_new[[1]]
       long      lat    mag
1  60.20424 34.61457 1100.0
2  60.20739 34.61155 1098.3
3  60.21058 34.60852 1099.7
4  60.21382 34.60544 1100.5
5  60.21700 34.60239 1100.0
6  60.22039 34.59930 1102.7
7  60.22388 34.59596 1103.0
8  60.22743 34.59245 1101.3
9  60.20323 34.60650 1080.0
10 60.20653 34.60346 1080.0
11 60.20966 34.60040 1080.8
12 60.21277 34.59748 1082.7
13 60.21590 34.59462 1084.1
14 60.21890 34.59161 1083.1

我想在选择输入中有这个A_new [[i]],然后告诉output$mymap 返回相关的地图。 目前,因为我无法在地图输出中设计选择输入选项,所以我只显示第一个A_new[[i]] A_new[[1]]

1 个答案:

答案 0 :(得分:0)

您是否尝试使用fileinput上传任何CSV? 我已尝试使用fileinput读取CSV并在dropdownlist(selectInput)中重新更改列名称的解决方案。

上传第一张包含4列的CSV

enter image description here

列表中显示4列

现在再次上传一个包含21列的csv

enter image description here

其中显示了21列..

代码: ui.r

library(shiny)

fluidPage(

  fileInput("file","Upload your CSV",multiple = FALSE),
  wellPanel(
    tags$h3("Select the parameters below"),
    checkboxInput(inputId = 'header', label = 'Header', value = FALSE),
    checkboxInput(inputId = "stringAsFactors", "stringAsFactors", FALSE),
    radioButtons(inputId = 'sep', label = 'Separator', choices = c(Comma=',',Semicolon=';',Tab='\t', Space=''), selected = ',')
  ),

  uiOutput("list_item")
)

Server.r

library(shiny)
shinyServer(function(input, output, session){

  data <- reactive({
    file1 <- input$file
    if(is.null(file1)){return()} 
    read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors)

  })




  output$list_item<-renderUI({
    f<-data()
    selectInput("selected_list","Select from the list",choices = as.list(colnames(f)))
  })



})

如果你想使用upadateselectinput,我也可以这样做..