在闪亮的应用中作为输入$输入时,按变量名称求和不起作用

时间:2019-06-14 20:01:43

标签: r shiny

我有一个闪亮的应用程序,下面该应用程序应该与选定的Frequency相加Category。但是由于某种原因input$investigate无法识别。当我从闪亮的应用程序中运行聚合代码时,它就可以工作。我在应用程序下方也提供了数据集。是命名问题还是闪亮问题?这就是我想知道的。

x <- data.frame(CategoryA=factor(c("First", "First", "First", "Second",
                                  "Third", "Third", "Second")),
                CategoryB=factor(c("First", "First", "First", "Second",
                                    "Third", "Third", "Second")),
                Frequency=c(10,15,5,2,14,20,3))


summ<-data.frame(aggregate(x$Frequency, by=list(x$CategoryA), FUN=sum))

应用

library(shiny)
ui <- pageWithSidebar(
  headerPanel('k-means '),
  sidebarPanel(
    uiOutput("inv")
  ),
  mainPanel(
    dataTableOutput("tab1")
  )
)
server <- function(input, output, session) {
  output$inv<-renderUI({
    radioButtons("investigate", label ="Select Category", 
                 choices = colnames(x)[1:2], 
                 selected = "CategoryA")
  })

  datasett<-reactive({
    summ<-data.frame(aggregate(Frequency ~ input$investigate, x, sum))
    summ
  })
  output$tab1<-renderDataTable({
    datasett()
  })
}
shinyApp(ui, server)

1 个答案:

答案 0 :(得分:2)

请注意,您正在传递公式来聚合Frequency ~ input$investigate,但也请注意,input$investigate返回的是字符值,而不是带有值的“变量”。您基本上在跑步

data.frame(aggregate(Frequency ~ "CategoryA", x, sum))

不起作用。您需要创建一个合适的公式,例如

data.frame(aggregate(Frequency ~ CategoryA, x, sum))

最简单的方法是使用reformulate()命令,该命令可以将字符值转换为公式。更新您的代码以使用

data.frame(aggregate(reformulate(input$investigate,"Frequency"), x, sum))