2017-08-10 3 views
1

Dies ist eine Frage derivated nach store input as numeric value to generate three tables in Shiny und ähnlich, aber nicht gleich, zu r shiny error Error in as.vector(x, "character") : cannot coerce type 'closure' to vector of type 'character'Shiny dynamischer Tabellenfehler

Ich will „nicht Typen‚Schließung‘zu Vektor vom Typ‚Charakter‘zwingen“ eine große Tabelle erstellen, um Erstellen Sie einige Tabellen nach dieser Tabelle in einer Shiny-App.

Hier mein MWE ist (scheint ein Problem mit dem Titel zu sein, die h3 des im UI):

Voll server.R:

# 
# This is the server logic of a Shiny web application. You can run the 
# application by clicking 'Run App' above. 
# 

# Required libraries 
if (!require("pacman")) install.packages("pacman") 
p_load(shiny,dplyr,DBI,ggplot2) 

# Define server logic 
shinyServer(

    function(input, output) { 

    display_table <- reactive({ 
     t <- reactive({ as.character(input$year) }) 

     # Read the RCA matrix 
     long_table = tbl_df(mpg) %>% filter(year == t()) 

     return(long_table) 
    }) 

    output$year = renderText(input$year) 

    output$miles <- DT::renderDataTable(DT::datatable({ 
     display_table() %>% select(manufacturer,model,cty,hwy) 
    })) 

    output$desc <- DT::renderDataTable(DT::datatable({ 
     display_table() %>% select(manufacturer,model,trans,class) 
    })) 

    } 
) 

Voll ui.R:

# 
# This is the user-interface definition of a Shiny web application. You can 
# run the application by clicking 'Run App' above. 
# 

# Required libraries 
if (!require("pacman")) install.packages("pacman") 
p_load(shiny) 

# Define UI for application that draws a histogram 
shinyUI(fluidPage(

    verticalLayout(
    # Application title 
    titlePanel("ggplot2's mpg dataset example"), 

    mainPanel(

     # User parameters 
     column(12, 
      tags$h3("Parameters"), 
      selectInput('year', 'Year', c("Select year",1999:2015), selected = 1999) 
    ), 

     # Display tables 
     column(12, 
      #withMathJax(includeMarkdown("Theory.md")), 
      h3("Miles per gallon for cars made in the year",textOutput("year")), 
      DT::dataTableOutput("miles"), 
      h3("Description for cars made in the year",textOutput("year")), 
      DT::dataTableOutput("desc") 
    ) 

    ) 
) 
)) 
+1

in Zukunft durch die Art und Weise, es wäre wirklich hilfreich, wenn Sie eine minimale Arbeitsbeispiel Post finden Sie [hier] (https://stackoverflow.com/documentation/shiny/10653/how-to-write-mcve-minimal-vollständig-und-verifizierbar-Beispiel-shiny-apps). Fügen Sie gefälschte Daten hinzu, damit andere Ihren Code ausführen können. Es erleichtert das Debuggen und hilft Ihnen, Ihr Problem zu lösen. – Florian

+0

vielen Dank !! Ich änderte das zu einem MWE mit 'mpg' Datensatz – pachamaltese

+0

Meine Antwort entsprechend aktualisiert. – Florian

Antwort

2

Das Problem ist, dass my_table eine reaktive ist, und Sie können keine reaktive mit DT::dataTableOutput() ausgeben. Dies können Sie nur für Objekte tun, die mit DT::renderDataTable() auf dem Server erstellt wurden. So

DT::dataTableOutput("my_table") 

wird nicht funktionieren, aber

DT::dataTableOutput("more_than_10") 

Willen. Wenn Sie die gesamte Tabelle angezeigt werden soll, müssen Sie auch eine Datentabelle erstellen, zum Beispiel wie folgt aus:

output$my_table2 <- DT::renderDataTable(DT::datatable({ 
     my_table() 
    })) 

Dann

DT::dataTableOutput("my_table2") 

funktionieren sollte. Hoffe das hilft!


EDIT: Sie aktualisiert Ihre Antwort mit einem MWE.

Es gab noch ein paar Probleme mit diesem MWE.

  • Sie können den gleichen Ausgang nicht zweimal verwenden. So werden zwei textOutput('year') Anweisungen Ihre App stumm zum Absturz bringen.
  • Denken Sie daran, wenn etwas reaktiv ist und wenn nicht. Keine Notwendigkeit für t(), nachdem Sie den Wert von zugewiesen haben.
  • Sie brauchen nicht den Aufruf des Pacman-Pakets;) und Sie brauchen ggplot2 für den MPG-Datensatz.

Dieser Code funktioniert:

library(ggplot2) 
library(shiny) 
library(dplyr) 
server<- function(input,output) 
{ 


     display_table <- reactive({ 
     t <- as.character(input$year) 
     # Read the RCA matrix 
     long_table = tbl_df(mpg) %>% filter(year == t) 
     return(long_table) 
     }) 

     output$year = renderText(input$year) 
     output$year2 = renderText(input$year) 

     output$miles <- DT::renderDataTable(DT::datatable({ 
     display_table() %>% select(manufacturer,model,cty,hwy) 
     })) 

     output$desc <- DT::renderDataTable(DT::datatable({ 
     display_table() %>% select(manufacturer,model,trans,class) 
     })) 


} 

ui<- shinyUI(fluidPage(

    verticalLayout(
    # Application title 
    titlePanel("ggplot2's mpg dataset example"), 

    mainPanel(

     # User parameters 
     column(12, 
      tags$h3("Parameters"), 
      selectInput('year', 'Year', c("Select year",1999:2015), selected = 1999) 
    ), 

     # Display tables 
     column(12, 
      h3("Miles per gallon for cars made in the year",textOutput("year")), 
      DT::dataTableOutput("miles"), 
      h3("Description for carss made in the year",textOutput("year2")), 
      DT::dataTableOutput("desc") 
    ) 

    ) 
) 
)) 

shinyApp(ui,server) 
+0

Hallo. Danke vielmals ! Ich änderte es in 'output $ more_than_10 <- DT :: rendernDataTable (DT :: datatable ({my_table()%>% filter (X1> 10)}))' und ich sehe den gleichen Fehler ..Ich werde weiter graben – pachamaltese

+0

Haben Sie auch die DT :: dataTableOutput-Anweisung geändert? – Florian

+0

in der Tat :) Ich änderte das – pachamaltese