как сделать top_n () реактивным?с использованием ввода $ х внутри функции? - PullRequest
0 голосов
/ 12 июня 2018

Я строю Shinyapp, и у меня есть данные для рынков и клиентов.

Я хочу сделать valueBox, который сообщает Top Markets компании, но я хочу, чтобы пользователь выбирал, какмногие рынки, которые он хочет увидеть (5,10,15,20 и т. д.)

Например, выбрать Top 5 или Top 10 или Top 15 и т. д.

и когда я подам заявкуэтот код, я получил эту ошибку:

ui.r:

  fluidRow( 
                        box(selectInput("topmar", "Select Top", c("5", "10", "15", "20"), selected = 5, width = "80px"), 
                          title = "Top Markets", width = 4, collapsible = TRUE, collapsed = TRUE, background = "light-blue", solidHeader = TRUE, 
                            tableOutput("top5market")),

server.r:

topmarket <- reactive({
    comcon() %>% 
      group_by(Market) %>% 
      summarize(CollectiveTurnover = sum(`Net turnover`)) %>% 
      arrange(desc(CollectiveTurnover)) %>% 
      # top_n(5)
      input$topmar <- as.numeric(top_n(input$topmar)) 
      top_n(input$topmar)
  })

снимок экрана с кодом и ошибкой

Это ошибка, которую я получаю:

нет применимого метода для 'tbl_vars', примененного к объектукласс "персонаж"

1 Ответ

0 голосов
/ 16 октября 2018

Полагаю, вы были почти у цели, но вы указали свой выбор selectInput в виде символов.Вот рабочий пример:

library(shiny)
library(shinydashboard)
library(dplyr)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody( fluidRow( 
    box(selectInput("topmar", "Select Top", c(5, 10, 15, 20), selected = 5, width = "80px"), 
        title = "Top Markets", width = 4, collapsible = TRUE, collapsed = TRUE, background = "light-blue", solidHeader = TRUE, 
        tableOutput("topMarketTable")))
  ))

server <- function(input, output) {
  comcon <- reactive({tibble(Market = paste0("Market_", rep(LETTERS[1:20], 100)), `Net turnover` = round(runif(2000, 10000, 20000)))})

  topMarket <- reactive({
    comcon() %>% 
      group_by(Market) %>% 
      summarize(CollectiveTurnover = sum(`Net turnover`)) %>% 
      arrange(desc(CollectiveTurnover)) %>% 
      top_n(n = as.integer(input$topmar), wt = CollectiveTurnover)
  })

  output$topMarketTable <- renderTable(topMarket())

}

shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...