2017-08-03 92 views
1

我有一个简单的闪亮应用程序:从其他功能的输入面板中调用选项?

阅读压缩文件。选择一些所需的文件和调整的基础上读取文件的编号输入面板:

ui <- fluidPage(
    fileInput("File", "Input checkbox"), 
    selectInput("inSelect", "Select input",c()) 
    leafletOutput("mymap") 
) 

server <- function(input, output, session) { 
    cor<- reactive({ 
    x=input$File 

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

    report_list <- c("Park result.txt", 
        "Park result minus", 
        "Park result plus") 
    temp_files <- unzip(x$datapath) 
    temp_files <- temp_files[grepl(paste(report_list, collapse = "|"), temp_files)] 

    T=length(temp_files) 

    A_new=c();for(i in 1:(T/3)){A_new[[i]]=c()} 
    for(i in 1:(T/3)){A_new[[i]]=....} 

    result <- list(T=T,A_new=A_new); 
    return(result); 
    }) 

observeEvent(cor(),{ 
updateSelectInput(session, "Select1", 
        label = paste(((cor()$T)/3),"different layout"), 
        choices = paste0("Layout",c(1:((cor()$T)/3)))) 
}) 

output$mymap <- renderLeaflet({ 
    infile=input$File 
    if (is.null(infile)) 
     return(NULL) 
    a2=cor() 
    leaflet() %>% 
     addProviderTiles("OpenTopoMap", group = "MapQuestOpen.Aerial") %>% 
     addMarkers(data =a2$A_new[[1]],~long, ~lat, popup = ~as.character(mag), label = ~as.character(Name))%>% 

     addMeasure() 
    }) 
} 

shinyApp(ui, server) 

最后,在我的output$mymap功能,我怎么可以将参数A_new,在某种程度上如果用户选择layout1,那么阴谋显示相关的地图A_new[[1]],如果layout2那么地图应该是A_new[[2]]来显示?!

回答

2

您也可以使用observeEvent这是少了很多码

observeEvent(cor(),{ 
    updateSelectInput(session, "inSelect",label = paste(cor()$t1,"different layout"),choices = paste0("Layout",c(1:cor()$t1))) 
    }) 
1

在你的反应中定义的任何内容都不能从反应的外部访问。所以内反应,你做

x=input$File 

所以x被内你的反应定义,但你的反应不是外面!所以在你的观察者:

observe({ 
if (is.null(x)) 
    return(NULL) 
... 

将无法​​正常工作,因为x不存在。我猜你想要做的是:

observe({ 
if (is.null(cor())) 
    return(NULL) 
... 

它检查如果反应是NULL。希望这可以帮助!

+0

感谢的地步!我不再有错误,但它仍然不会对变化做出反应!我的意思是我的选择输入在运行带反应功能的代码后不会更新 –

+0

对我而言,它工作正常吗? – Florian

+0

我发现这个问题,与我正在使用的侧边栏布局有关,现在我再次混淆了这些订单,但我还有另外一个问题,如果您再次通过我的更新问题,会很好。非常感谢你。 –

相关问题