【问题标题】:Shiny not detecting input in output闪亮未检测到输出中的输入
【发布时间】:2020-04-25 06:20:51
【问题描述】:

如果我运行以下代码,一切正常:

    library(dplyr)
    library(tidyr)
    library(shiny)

    id <- 1:100
    gender <- sample(c('M','F'), 100, replace=TRUE)
    age <- sample(18:22, 100, replace=TRUE)
    ethnicity <- sample(c('W','B','H','A','O'), 100, replace = TRUE)
    grade <- sample(LETTERS[1:4], 100, replace=TRUE)
    df <- cbind(id,gender,age,ethnicity,grade) %>% as.data.frame()

    list1 <- list("id"="id","gender"="gender","age"="age","ethnicity"="ethnicity","grade"="grade")
    list2 <- list("id"="id","gender"="gender","age"="age","ethnicity"="ethnicity","grade"="grade")

    ui <-fluidPage(

      selectInput("picker1", "PICKER 1", choices = list1, selected = "gender"),
      selectInput("picker2", "PICKER 2", choices = list2, selected = "grade"),
      tableOutput("crosstabs")

    )

    server <- function(input,output,session){

      output$crosstabs <- renderTable({

        t<-df %>% select_all() %>% select(-id) %>%
          pivot_longer(cols = input$picker1) %>%
          count(name,value, grade) %>% pivot_wider(names_from = grade, values_from = n)
        t
      })

    }

    shinyApp(ui,server)

但是当我更新output$crosstabs 以包含input$picker2 时,它返回一个错误。我很困惑,因为我使用的是相同的结构,但只是将grade 换成了input$picker2:

output$crosstabs <- renderTable({

    t<-df %>% select_all() %>% select(-id) %>%
      pivot_longer(cols = input$picker1) %>%
      count(name,value, input$picker2) %>% pivot_wider(names_from = input$picker2, values_from = n)
    t
  })

这里到底发生了什么?

【问题讨论】:

    标签: r shiny dplyr tidyr shiny-server


    【解决方案1】:

    它是一个字符串,count 需要一个不带引号的列名,我们可以将其转换为 symbol 并计算 (!!)

    server <- function(input,output,session){
    
     output$crosstabs <- renderTable({
    
        df %>%
          select_all() %>% 
          select(-id) %>%
          pivot_longer(cols = input$picker1) %>%
          count(name,value, !!rlang::sym(input$picker2)) %>% 
          pivot_wider(names_from = input$picker2, values_from = n)
    
          })
    
       }
    

    -测试

    【讨论】:

    • 您在names_from 部分中省略了input$picker2,但除此之外,它就像一个魅力。谢谢大王!
    • @gooponyagrinch 谢谢,我改了,它。 pivot_wider 可以采用不带引号的字符串或字符串
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2018-07-21
    • 1970-01-01
    • 2021-07-09
    • 2021-01-03
    • 1970-01-01
    相关资源
    最近更新 更多