2012-12-16 10 views
12

अपडेट - 12/17/2012 9am सीडीटी: उदाहरण डेमो डेटा और पूर्ण के साथ अपडेट किया गया है कोड। [/ अपडेट]।चमकदार ui.R - टैग में त्रुटि ("div", सूची (...)) - सुनिश्चित नहीं है कि त्रुटि कहां है

उदाहरण डेटा:https://gist.github.com/4318774

विवरण: मैं चारों ओर नई चमकदार पैकेज के साथ खेल किया गया है (! इसे प्यार करता हूँ), लेकिन अभी तक एक त्रुटि मैं हो रही है समझ में नहीं आता है जब मैं runApp("")। त्रुटि Error in tag("div", list(...)): argument is missing है।

मैं जनसांख्यिकीय डेटा के ग्राफिकल अन्वेषण के लिए एक इंटरैक्टिव वेब-ऐप बनाने की कोशिश कर रहा हूं। मैं गाइड के रूप में निम्नलिखित का उपयोग कर रहा:
https://gist.github.com/4026749
http://rstudio.github.com/shiny/tutorial/

options(error= recover) के साथ, मैं मिलता है:

Listening on port 8100 
Error in tag("div", list(...)) : argument is missing, with no default 

Enter a frame number, or 0 to exit 

1: runApp("//~~my app~~") 
2: tryCatch(while (TRUE) { 
    serviceApp(ws_env) 
}, finally = { 
    timerCallbacks$clear() 
    websocket_close(ws_env) 
}) 
3: tryCatchList(expr, classes, parentenv, handlers) 
4: serviceApp(ws_env) 
5: service(server = ws_env, timeout = timeout) 
6: server$static(j, J$wsinfo) 
7: handler(ws, header) 
8: handler(ws, header) 
9: local({ 
    cacheContext$with(function() { 
     source(filePath, local = new.env(parent = .GlobalEnv)) 
    }) 
}) 
10: eval.parent(substitute(eval(quote(expr), envir))) 
11: eval(expr, p) 
12: eval(expr, envir, enclos) 
13: eval(quote({ 
    cacheContext$with(function() { 
     source(filePath, local = new.env(parent = .GlobalEnv)) 
    }) 

14: eval(expr, envir, enclos) 
15: cacheContext$with(function() { 
    source(filePath, local = new.env(parent = .GlobalEnv)) 
}) 
16: func() 
17: source(filePath, local = new.env(parent = .GlobalEnv)) 
18: withVisible(eval(ei, envir)) 
19: eval(ei, envir) 
20: eval(expr, envir, enclos) 
21: ui.R#6: shinyUI(pageWithSidebar(headerPanel("Demographics Web Demo - Eglin Data"), sidebarPanel(textInput("plot.ti 
22: force(ui) 
23: pageWithSidebar(headerPanel("Demographics Web Demo - Eglin Data"), sidebarPanel(textInput("plot.title", "Title:", 
24: bootstrapPage(div(class = "container-fluid", div(class = "row-fluid", headerPanel), div(class = "row-fluid", sideb 
25: tagList(importBootstrap(), list(...)) 
26: div(class = "container-fluid", div(class = "row-fluid", headerPanel), div(class = "row-fluid", sidebarPanel, mainP 
27: tags$div(...) 
28: tag("div", list(...)) 
29: div(class = "row-fluid", sidebarPanel, mainPanel) 
30: tags$div(...) 
31: tag("div", list(...)) 
32: sidebarPanel(textInput("plot.title", "Title:", "Population Pyramid of Members"), wellPanel(p(strong("Demographic o 
33: div(class = "span4", tags$form(class = "well", ...)) 
34: tags$div(...) 
35: tag("div", list(...)) 
36: tags$form(class = "well", ...) 
37: tag("form", list(...)) 
38: wellPanel(p(strong("Demographic of Interest")), checkboxInput(inputId = "age_dist", label = "Age Distribution", va 
39: div(class = "well", ...) 
40: tags$div(...) 
41: tag("div", list(...)) 

मैं जांच कर रही कि क्या हो रहा था की कोशिश की, लेकिन checkboxInput कोड सही लग रही है?। यह भी काफी RStudio (ऊपर लिंक GitHub) से "स्टॉक" उदाहरण का एक सीधा कॉपी है

ui.R/Server.R कोड:
ui.R

library(shiny) 

shinyUI(pageWithSidebar(
    # application title 
    headerPanel("Demographics Web Demo - Eglin Data"), 

    # sidebar with controls to allow user to define graphical elements and how 
    # they want them displayed. 
    sidebarPanel(
    # allow the user to write a plot Title 
    textInput("plot.title", "Title:", "Population Pyramid of Members"), 

    # allow the user to determine which demographic they want to plot 
    wellPanel(
     p(strong("Demographic of Interest")), 
     checkboxInput(inputId = "age_dist", label = "Age Distribution",  value = TRUE), 
     checkboxInput(inputId = "wealth_dist", label = "Household Wealth",  value = FALSE), 
     checkboxInput(inputId = "home_val", label = "Home Value",   value = FALSE), 
     checkboxInput(inputId = "ed_level", label = "Members' Education", value = FALSE), 
     checkboxInput(inputId = "inc_level", label = "Members' Est. Income", value = FALSE), 
     checkboxInput(inputId = "h_own",  label = "Homeownership",   value = FALSE), 
    ), 

    # allow the user to determine age-bracket size. Input used in plotting 
    sliderInput("age_cut", "Select Size of Age Brackets:", 
       min= 3, max= 20, value= 5), 

    # allow the user to subset their demographics by age range 
    #sliderInput("age_sub", "Please select the age range you would like to 'zoom-in' on:", 
    #   min= 0, max= 120, value= c(15,65)), 
), 


    # display the appropriate graphics based on the user selections defined 
    # above. 
    mainPanel(
    h3(textOutput("caption")), 

    conditionalPanel(condition= "input.age_dist", 
        plotOutput(outputId= "plot_age")), 
    conditionalPanel(condition= "input.wealth_dist", 
        plotOutput(outputId= "plot_wealth")), 
    conditionalPanel(condition= "input.home_val", 
        plotOutput(outputId= "plot_home_value")), 
    conditionalPanel(condition= "input.ed_level", 
        plotOutput(outputId= "plot_edu")), 
    conditionalPanel(condition= "input.inc_level", 
        plotOutput(outputId= "plot_inc")), 
    conditionalPanel(condition= "input.h_own", 
        plotOutput(outputId= "plot_h_own")) 
) 
)) 

server.R

# require packages 
if (!require(ggplot2)) { 
    stop("This application requires ggplot2. To install it, please run 'install.packages(\"ggplot2\")'.\n") 
} 
if (!require(plotrix)) { 
    stop("This application requires plotrix. To install it, please run 'install.packages(\"plotrix\")'.\n") 
} 
library(shiny) 

# load example demo data 
load("~~you'll need to load the test data here") 


shinyServer(function(input, output) { 

    # reactive function based on user input for plot title 
    # This function is automatically called to update the display 
    output$caption <- reactiveText(function() { 
    input$plot.title 
    }) 

    updateAge_f <- reactive(function() { 
    # re-define age brackets based on user input 
    demos$age_f <- ordered(cut(demos$age, breaks= c(seq(0, max(demos$age), input$age_cut)), 
           include.lowest= T)) 
    }) 

    # Generate a plot of the Members' age distribution 
    output$plot_age <- reactivePlot(function() { 
    # call to update age factor if needed 
    updateAge_f() 
    # develop input vectors 
    male <- as.vector(table(demos$age_f, demos$female_flag)[,1]/summary(demos$female_flag)[1] * 100) 
    women <- as.vector(table(demos$age_f, demos$female_flag)[,2]/summary(demos$female_flag)[2] * 100) 
    # create plot 
    pyramid.plot(lx= male, rx= women, 
       labels= levels(demos$age_f), 
       lxcol= "blue", rxcol= "pink", 
       main= "Population Pyramid of Members", 
       gap= 2, labelcex= .75) 
    }) 

    # generate a plot of members' wealth codes 
    output$plot_wealth <- reactivePlot(function() { 
    # call to update age factor if needed 
    updateAge_f() 

    if (input$factor_age == TRUE) { 
     ggplot(demos2, aes(wealth)) + geom_bar() + 
     facet_wrap(~ age_f, ncol= 3) + theme_bw() + 
     labs(title= "Wealth of Members by Age Bracket", 
      y= "Count of Individuals", 
      x= "Decile of Wealth (by State)") + 
     theme(axis.text.x= element_text(angle= 90)) 
    } else if (input$factor_age == FALSE) { 
     ggplot(demos2, aes(wealth)) + geom_bar() + 
     theme_bw() + 
     labs(title= "Wealth of Members of your Members", 
      y= "Count of Individuals", 
      x= "Decile of Wealth (by State)") + 
     theme(axis.text.x= element_text(angle= 90)) 
    } 
    }) 

    # generate a plot of home value of members' properties 
    output$plot_home_value <- reactivePlot(function() { 
    # call to update age factor if needed 
    updateAge_f() 

    if (input$factor_age == TRUE) { 
     ggplot(demos2, aes(home_value)) + geom_bar() + 
     facet_wrap(~ age_f, ncol= 3) + theme_bw() + 
     labs(title= "Home Value by Age Bracket", 
      y= "Count of Individuals", 
      x= "Home Value") + 
     theme(axis.text.x= element_text(angle= 90)) 
    } else if (input$factor_age == FALSE) { 
     ggplot(demos2, aes(home_value)) + geom_bar() + 
     theme_bw() + 
     labs(title= "Home Value of your Members", 
      y= "Count of Individuals", 
      x= "Home Value") + 
     theme(axis.text.x= element_text(angle= 90)) 
    } 
    }) 

    # generate a plot of education distribution 
    output$plot_edu <- reactivePlot(function() { 
    # call to update age factor if needed 
    updateAge_f() 

    if (input$factor_age == TRUE) { 
     ggplot(demos2, aes(ed_code)) + geom_bar() + 
     facet_wrap(~ age_f, ncol= 3) + theme_bw() + 
     labs(title= "Education Level by Age Bracket", 
      y= "Count of Individuals", 
      x= "Education Level") + 
     theme(axis.text.x= element_text(angle= 90)) 
    } else if (input$factor_age == FALSE) { 
     ggplot(demos2, aes(ed_code)) + geom_bar() + 
     theme_bw() + 
     labs(title= "Education Level of your Members", 
      y= "Count of Individuals", 
      x= "Education Level") + 
     theme(axis.text.x= element_text(angle= 90)) 
    } 
    }) 

    # generate a plot of members' estimated income levels 
    output$plot_inc <- reactivePlot(function() { 
    # call to update age factor if needed 
    updateAge_f() 

    if (input$factor_age == TRUE) { 
     ggplot(demos2, aes(inc)) + geom_bar() + 
     facet_wrap(~ age_f, ncol= 3) + theme_bw() + 
     labs(title= "Estimated Income by Age Bracket", 
      y= "Count of Individuals", 
      x= "Estimated Income Range") + 
     theme(axis.text.x= element_text(angle= 90)) 
    } else if (input$factor_age == FALSE) { 
     ggplot(demos2, aes(inc)) + geom_bar() + 
     theme_bw() + 
     labs(title= "Estimated Income of your Members", 
      y= "Count of Individuals", 
      x= "Estimated Income Range") + 
     theme(axis.text.x= element_text(angle= 90)) 
    } 
    }) 

    # generate a plot of members' homeownership 
    output$plot_h_own <- reactivePlot(function() { 
    # call to update age factor if needed 
    updateAge_f() 

    if (input$factor_age == TRUE) { 
     ggplot(demos2, aes(homeOwner)) + geom_bar() + 
     facet_wrap(~ age_f, ncol= 3) + theme_bw() + 
     labs(title= "Home Ownership by Age Bracket", 
      y= "Count of Individuals", 
      x= "Home Owner/Renter") + 
     theme(axis.text.x= element_text(angle= 90)) 
    } else if (input$factor_age == FALSE) { 
     ggplot(demos2, aes(homeOwner)) + geom_bar() + 
     theme_bw() + 
     labs(title= "Home Ownership of your Members", 
      y= "Count of Individuals", 
      x= "Home Owner/Renter") + 
     theme(axis.text.x= element_text(angle= 90)) 
    } 
    }) 
}) 

किसी भी मदद की सराहना की जाएगी, अभी भी चमकदार सीखने की कोशिश कर रहा है (जैसे ev अन्य सभी)।

+0

क्या "# ... अधिक अनुसरण करने के लिए ..." का अर्थ है कि वहां और कोड है जो आप हमें नहीं दिखा रहे हैं? – GSee

+0

नहीं, इसका मतलब है कि मैं –

+0

लिखने की योजना बना रहा हूं, यह एकमात्र चीज है जो मुझे लगता है कि संदिग्ध लग रहा है कि आप स्लाइडर इनपुट() में मूल्य के लिए एक ही संख्या उत्तीर्ण कर रहे हैं, जब, विशेष रूप से यदि यह एक सीमा है, तो आप ' सी (नीचे, शीर्ष) –

उत्तर

22

ui.R में, आप इस पंक्ति के अंत में एक अल्पविराम नहीं करना चाहिए था:

sliderInput("age_cut", "Select Size of Age Brackets:", 
      min= 3, max= 20, value= 5), 
वहाँ भी

इस लाइन

checkboxInput(inputId = "h_own",  label = "Homeownership",   value = FALSE), 

के अंत में एक अल्पविराम नहीं होना चाहिए आम तौर पर, आपको किसी सेक्शन के अंतिम घटक के बाद कॉमा नहीं होना चाहिए। किसी भी आर समारोह के साथ, आप आमतौर पर कॉमा के साथ फ़ंक्शन कॉल को समाप्त नहीं करते हैं। जैसे sum(5,) एक त्रुटि देता है।

+3

धन्यवाद --- ... वाक्यविन्यास त्रुटियां ... –

+10

ये त्रुटियां दर्दनाक, परेशान और ट्रैक करने के लिए असंभव हैं। वास्तव में बहुत निराशाजनक, क्योंकि ट्रेसबैक() उस कोड का संदर्भ नहीं देता है जो आप वास्तव में काम कर रहे हैं। –

संबंधित मुद्दे