在Reshape Cast()中使用Shiny Widget的输入

时间:2014-07-22 00:21:02

标签: r shiny reshape

我试图在我的闪亮网页应用中创建一种数据透视表,用户可以在其中选择要互相投射的变量。我发现的问题是,当我尝试使用我的'输入$ columns'我得到以下内容:错误:转换公式包含熔融数据中找不到的变量:input $ columns。输入的$ columns应该是我的数据集中找到的三个列名之一,因此我不确定问题可能是什么。我附上了简化版的代码,试图找出问题所在。

UI

 library(shiny)

    shinyUI(fluidPage(

     titlePanel("Reactivity"),


     sidebarLayout(
       sidebarPanel(
       textInput("caption", "Caption:", "Column Name:"),

       selectInput("columns", "Choose a dataset:", 
                  choices = c("Publisher", "Region", "Representative")),

       numericInput("obs", "Number of observations to view:", 10)
      ),


     mainPanel(
      h3(textOutput("caption")), 

      verbatimTextOutput("summary"), 

      dataTableOutput('view')
     )
    )
    ))

服务器

library(shiny)
library(datasets)

shinyServer(function(input, output) {

  datasetInput <- reactive({
    switch(input$columns,
           "Publisher" = Publisher,
           "Region" = Region,
           "Representative" = Representative)
  })

  output$caption <- renderText({
    input$caption
  })

  output$summary <- renderPrint({
    dataset <- datasetInput()
    summary(dataset)
  })

  output$view <- renderDataTable({
    test <- input$columns
    m.book.sales <- melt(book.sales)
    cast(m.book.sales, test ~ variable, sum)
  })
})

和数据集

> head(book.sales)
  Representative Region      Month Publisher    Subject Sales Margin Quantity
1            Raj      S 1997-01-01      SAGE Management 135.0  63.45        9
2            Raj      S 1997-01-01 Routledge Statistics 120.0  48.00        6
3            Raj      S 1997-01-01   Penguin  Economics  54.0  22.68        4
4            Raj      S 1997-01-01 Routledge    Fiction 234.0 128.70        9
5           Soni      S 1997-01-01   Penguin   Politics  54.0  22.68        4
6           Soni      S 1997-01-01      SAGE   Politics 185.4 100.12       12

1 个答案:

答案 0 :(得分:1)

您需要传递一个有效的公式。 test是一个变量,不能在公式调用中使用。您可以使用paste构建论坛,并使用as.formula转换:

 output$view <- renderDataTable({
   test <- input$columns
   m.book.sales <- melt(book.sales)
   myFormula <- as.formula(paste0(test, " ~ variable"))
   cast(m.book.sales, myFormula, sum)
 })