Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r-空textInput(),导致传单应用程序出错_R_Shiny_Leaflet_Textinput - Fatal编程技术网

r-空textInput(),导致传单应用程序出错

r-空textInput(),导致传单应用程序出错,r,shiny,leaflet,textinput,R,Shiny,Leaflet,Textinput,我有一个闪亮的应用程序,可以将API中的数据绘制在传单地图上。它还接收来自用户的2个输入,这些输入通过API调用传递 其中一个是文本输入,它设置API应该为其提取数据的区域。如果用户键入了错误的地区代码或只是删除了代码,Shining应用程序会给出一个错误,然后您必须键入正确的代码,等待应用程序重新回到正轨。它笨重而且看起来很糟糕 我试图通过将ifis.nullAPIdata与if{}else{}see代码一起使用来绕过它,但这实际上并没有改变任何东西。我认为它会起作用,我很赞成它只是突然出现在

我有一个闪亮的应用程序,可以将API中的数据绘制在传单地图上。它还接收来自用户的2个输入,这些输入通过API调用传递

其中一个是文本输入,它设置API应该为其提取数据的区域。如果用户键入了错误的地区代码或只是删除了代码,Shining应用程序会给出一个错误,然后您必须键入正确的代码,等待应用程序重新回到正轨。它笨重而且看起来很糟糕

我试图通过将ifis.nullAPIdata与if{}else{}see代码一起使用来绕过它,但这实际上并没有改变任何东西。我认为它会起作用,我很赞成它只是突然出现在一张空的传单上。还有什么我能做的吗

错误:

代码:


您可以只验证您是得到一个带值的TIBLE,还是得到一个空TIBLE。如果tibble为空,则可以返回NULL。这样,您为检查APIdata是否为NULL而添加的验证就可以工作了


您只需在a之后添加iflengtha==0{returnNULL}您不想在转到api之前验证输入吗?你为什么允许用户提交无效数据?谢谢!好主意。我已经包括了这一行,但它实际上仍然会对某些类型的输入抛出一个错误。例如,当我输入US-M删除A或US-,它会执行我想要的操作,并弹出一张空的传单。但是如果我删除回U,那么它会抛出与之前相同的错误。我刚刚签入了一个空白的脚本文档,它是ebirnotable,它通过一些输入来打印准确的错误。但它仍然会生成0x0 TIBLE。我可以在这里实现tryCatch吗?我以前没用过。@Heliornis你说得对,你可以用这里试试。我已经编辑了代码,看一看。
Error: parse error: premature EOF

                     (right here) ------^
Warning: Error in : parse error: premature EOF

                     (right here) ------^

Stack trace (innermost first):
    96: parse_string
    95: parseJSON
    94: fromJSON_string
    93: jsonlite::fromJSON
    92: ebird_GET
    91: ebirdnotable
    90: <reactive:APIdata> [/Users/Guest/Desktop/eBirdRarity/app.R#41]
    79: APIdata
    78: func [/Users/Guest/Desktop/eBirdRarity/app.R#68]
    77: origRenderFunc
    76: output$myMap
     1: runApp
library(shiny)
library(shinydashboard)
library(shinythemes)
library(leaflet)
library(leaflet.extras)
library(rebird)

ui <- bootstrapPage(

    theme = shinytheme("superhero"),

    # Setting map to full-screen
    tags$style(type="text/css", "html, body {width:100%;height:100%}"),

    # Initializing leaflet output
    leafletOutput("myMap", width="100%", height="100%"),

    # Adding title overlayed on leaflet map
    absolutePanel(top = 1, left = 50, draggable = T, 
                  titlePanel("eBird Recent Rarities Viewer")),

    # Adding slider input overlayed on leaflet map
    absolutePanel(bottom = 1, left = 45, draggable = T, 
                  sliderInput("slider_in", "Days Back", min = 1, max = 30, value = 14, round = T)),

    # Adding text input overlayed on leaflet map
    absolutePanel(top = 1, right = 45, draggable = T,
                  textInput("region_in", "Region Code", value = "US-MA", placeholder = "US-MA"))
)

server <- function(input, output) {

  # Rendering data frame from API with slider input
  APIdata <- reactive({

    # Initial fetch of data from eBird API
    a <- ebirdnotable(region = as.character(input$region_in), back = as.numeric(input$slider_in))

    # Changing review status from logical to numeric
    cols <- sapply(a, is.logical)
    a[,cols] <- lapply(a[,cols], as.numeric)

    # Initializing new date column
    a["date"] <- format(strptime(a$obsDt, format = "%Y-%m-%d"), "%b %d")

    # Initializing new color grouping column
    a["group"] <- NA

    # Assigning colors by review status
    idx<-  (a$obsReviewed == 0) # Not reviewed
    a$group[idx] <- "white"
    idx<- (a$obsReviewed == 1) & (a$obsValid == 1) # Reviewed and accepted
    a$group[idx] <- "green"

    # Jittering lat/lon points to fix point overlap
    a$lat = jitter(a$lat, factor = 3) 

    # print(a)
    return(a)
  })

  # Leaflet map
  output$myMap = renderLeaflet({
    if(is.null(APIdata()))
    {
      # Rendering leaflet map
      return(leaflet() %>% addTiles()) %>%
        addSearchOSM(options = searchOSMOptions(zoom = 8))
    }
    else
    {
      # Splitting up by review status in order to show reviewed on top
      notReviewed = APIdata()[APIdata()$group == "white",]
      accepted = APIdata()[APIdata()$group == "green",]

      # Rendering leaflet map
      leaflet() %>% addTiles() %>%
      addCircleMarkers(data = notReviewed, color = "white", opacity = 0.7, label = paste(notReviewed$comName,", ",notReviewed$date, ", ", notReviewed$locName,sep = "")) %>% # , labelOptions = labelOptions(noHide = F, direction = 'auto')) %>%
      addCircleMarkers(data = accepted, color = "green", opacity = 0.7, label = paste(accepted$comName,", ",accepted$date, ", ", accepted$locName, sep = "")) %>% # , labelOptions = labelOptions(noHide = F, direction = 'auto')) %>%
      addLegend(position = "bottomright", 
                  colors = c("#FFFFFF", "#008000"), 
                  labels = c("Not reviewed", "Accepted"),
                  title = "Legend: review status", opacity = 1) %>%
      addSearchOSM(options = searchOSMOptions(zoom = 8))
    }
   })
}

# Run the application 
shinyApp(ui = ui, server = server)
 a <- try(ebirdnotable(region = as.character(input$region_in), back = as.numeric(input$slider_in)))
          if(class(a) == "try-error" ||length(a) == 0){return(NULL)}