繁体   English   中英

R和Shiny:找不到对象

[英]R and Shiny: object not found

编辑以包括完整的用户界面和示例数据

我确实阅读了有关此问题的其他StackOverflow qs,但似乎都没有解决我的错误的原因。

应用加载后,我会得到“区域的错误对象[找不到的区域名称]”(inputID =“ d”)。 我知道服务器中的反应式子集肯定是一个问题,但是我已经尝试了所有方法(将数据加载到服务器中,从过滤器函数中删除向量,更改变量的数据类型)。

我还从我构建的另一个Shiny App中获取了此代码,该代码有效。 我看不到两者之间的任何区别,除了一个是geom_point()和这是geom_col()之外,所以再一次,不确定发生了什么。

谢谢!

样本数据:

sample <- sample_n(pop, 10)

dput(sample)

structure(list(GazID = c(NA, NA, "13872", NA, "13610", "13985", 
"13984", "13434", "13428", "13631"), Province = c("Niolandskaia", 
"Kaluzhskaia", "Iaroslavskaia", "Vyborgskaia", "Moskovskaia", 
"Volynskaia", "Volynskaia", "Orenburgskaia", "Orenburgskaia", 
"Arkhangel'skaia"), District = c(NA, "Suhinichinbezuezdniigorod", 
"Romanov", NA, "Zvenigorod", "Kovel", "Lutsk", "Ufa", "Orenburg", 
"Mezen"), TotalPop = c(NA, NA, 104104, NA, 71746, 103381, 102779, 
93145, 62740, 26796), Male = c(NA, NA, 48604, NA, 36948, 52266, 
50393, 46403, 32617, 13078), Female = c(NA, NA, 55500, NA, 34798, 
51115, 52386, 46742, 30123, 13718), City = c(NA, 5552, NA, NA, 
1253, 4254, 5552, 6682, 9533, NA), Rural = c(NA, NA, NA, NA, 
70493, 99127, 97228, 86483, 53207, NA)), row.names = c(NA, -10L
), class = c("tbl_df", "tbl", "data.frame")) 

在用户界面上方:

library(tidyverse)
library(readr)
library(shiny)
library(stringr)
library(rebus)

pop <- read_csv("pop.csv") 

pop$TotalPop <- str_replace_all(pop$TotalPop, pattern = fixed(","), replacement = "") 
pop$Male <- str_replace_all(pop$Male, pattern = fixed(","), replacement = "") 
pop$Female <- str_replace_all(pop$Female, pattern = fixed(","), replacement = "") 
pop$City <- str_replace_all(pop$City, pattern = fixed(","), replacement = "") 
pop$Rural <- str_replace_all(pop$Rural, pattern = fixed(","), replacement = "") 
pop$District <- str_remove_all(pop$District, pattern = "[^[:alnum:]]") 
pop$TotalPop <- as.numeric(pop$TotalPop)
pop$Male <- as.numeric(pop$Male)
pop$Female <- as.numeric(pop$Female)
pop$City <- as.numeric(pop$City)
pop$Rural <- as.numeric(pop$Rural)
pop$GazID <- as.character(pop$GazID)
pop$District <- str_trim(pop$District)

用户界面:

ui <- fluidPage(

   titlePanel("Population Data from VSO"),

   sidebarLayout(
        sidebarPanel(
        selectInput(inputId = "y", #internal label 
                    label = "Population to map", #label that user sees
                    choices = c("Total population" = "TotalPop", 
                                "Male population" = "Male", 
                                "Female population" = "Female",
                                "Urban population" = "City",
                                "Rural population" = "Rural"),
                    selected = "TotalPop"),

        selectizeInput(inputId = "d", 
                       label = "Select district", 
                       choices = c(pop$District), 
                       multiple = TRUE, # can choose multiple 
                       options = list(maxItems = 5))), 


      mainPanel(
         plotOutput("plot")
      )
   )
)

服务器:

server <- function(input, output) {
      pop_subset <- reactive({
        req(input$d)
        filter(pop, District %in% c(input$d)
               )})

 output$plot <- renderPlot({
  ggplot(data = pop_subset(), aes_string(x = pop_subset()$District, y =     input$y)) + 
          geom_col(aes(fill = pop_subset()$District)) + 
          labs(x = "District", y = "Population") +
          scale_fill_discrete(name = "Districts")
})}

shinyApp(ui = ui, server = server)

问题是,你正在使用aes_stringggplot ,而是试图通过District不包括引号。 我意识到您需要aes_string因为您正在使用input$y ,因此只需将plot调用更改为

  output$plot <- renderPlot({
    req(pop_subset())
    ggplot(data = pop_subset(), aes_string(x = "District", y =     input$y)) + 
      geom_col(aes(fill = District)) + 
      labs(x = "District", y = "Population") +
      scale_fill_discrete(name = "Districts")
  })

对于可重现性,包装和一些示例数据(我不认为其真正的代表性质并不重要)。

library(dplyr)
library(shiny)
library(ggplot2)

set.seed(42)
n <- 50
pop <- data_frame(
  TotalPop = sample(1e4, size=n, replace=TRUE)
) %>%
  mutate(
    Male = pmax(0, TotalPop - sample(1e4, size=n, replace=TRUE)),
    Female = TotalPop - Male,
    City = sample(LETTERS, size=n, replace=TRUE),
    District = sample(letters, size=n, replace=TRUE)
  )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM