表单在提交按钮闪亮R之前更新输出

时间:2015-03-31 10:46:43

标签: r forms shiny submit-button

在我按下“提交”按钮之前,我的表单会自动更新输出。我阅读了“提交”按钮的说明,并说“包含提交按钮的表单在输入更改时不会自动更新其输出,而是等到用户明确单击提交按钮”。我不确定是否有任何错误。

有关您的信息,这是我的代码。数据来自UCI(成人数据)

Server.R

library(shiny)
library(caret)

predictSalary <- function(input){

  adultData <- read.table("adult.data", header = FALSE, sep = ",", strip.white = TRUE)
  adultName <- read.csv("adult.name.csv", header = FALSE, sep = ",", stringsAsFactors = FALSE)
  names(adultData) <- adultName[, 1]

  #Only select several attributes
  selected <- c("age", "education", "marital.status", "relationship", "sex", "hours.per.week", "salary")
  #selected <- c("age", "hours.per.week", "salary")
  adultData <- subset(adultData, select = selected)

  #The data is big, we only take 20% for the training
  trainIndex = createDataPartition(adultData$salary, p=0.20, list=FALSE)
  training = adultData[ trainIndex, ]

  set.seed(33833)
  modFit <- train(salary ~ ., method = "rpart", data=training)
  predict(modFit, newdata = input)
}


shinyServer(
  function(input, output) {

    dataInput <- reactive({

      age <- input$age
      edu <- as.factor(input$edu)
      marritalstat <- input$marritalstat
      relationship <- input$relationship
      sex <- input$sex
      hours <- input$hours
      data.frame(age = age, 
                 education = edu, 
                 marital.status = marritalstat, 
                 relationship = relationship, 
                 sex = sex, 
                 hours.per.week = hours)
#       age <- input$age
#       hours <- input$hours
#       data.frame(age = age, hours.per.week = hours)
    })

#     dat <- c(input$age, input$edu, input$marritalstat, 
#              input$relationship, input$sex, input$hours)
    output$prediction <- renderPrint({predictSalary(dataInput())})
  }
)

Ui.R

library(shiny)
shinyUI(
  pageWithSidebar(
    # Application title
    headerPanel("Salary prediction"),
    sidebarPanel(
      numericInput('age', 'Age', 40, min = 17, max = 90, step = 1),
      selectInput('edu', 'Education', 
                  c("Bachelors"="Bachelors", 
                    "Some-college"="Some-college", 
                    "11th"="11th", 
                    "HS-grad"="HS-grad", 
                    "Prof-school"="Prof-school", 
                    "Assoc-acdm"="Assoc-acdm", 
                    "Assoc-voc"="Assoc-voc", 
                    "9th"="9th", 
                    "7th-8th"="7th-8th", 
                    "12th"="12th", 
                    "Masters"="Masters", 
                    "1st-4th"="1st-4th", 
                    "10th"="10th", 
                    "Doctorate"="Doctorate", 
                    "5th-6th"="5th-6th", 
                    "Preschool"="Preschool")),
      radioButtons('marritalstat', 'Marrital Status',
                   c("Married-civ-spouse" = "Married-civ-spouse", 
                     "Divorced" = "Divorced", 
                     "Never-married" = "Never-married", 
                     "Separated" = "Separated", 
                     "Widowed" = "Widowed", 
                     "Married-spouse-absent" = "Married-spouse-absent", 
                     "Married-AF-spouse" = "Married-AF-spouse")),
      radioButtons('relationship', 'Relationship',
                   c("Wife" = "Wife", 
                     "Own-child" = "Own-child", 
                     "Husband" = "Husband", 
                     "Not-in-family" = "Not-in-family", 
                     "Other-relative" = "Other-relative", 
                     "Unmarried" = "Unmarried")),
      radioButtons('sex', 'Sex', c("Male", "Female")),
      numericInput('hours', 'Hours per week', 40, min = 1, max = 99, step = 1),
      submitButton('Submit')
    ),
    mainPanel(
      h3('Results of prediction'),
      h4('The predicted salary is '),
      verbatimTextOutput("prediction"),
      h3('Prediction of salary'),
      p('The application is designed to predict whether somebodys salary is greater or smaller than 50k. 
        The data is extracted from the adult data, provided by UCI database. In order to predict a salary, users need to
        provide information of the person whom they would like to make prediction on. After filling in necessary information,
        users will press "Submit". The information includes:'),
      p(' - Age: must be from 17 to 90'),
      p(' - Education'),
      p(' - Marital status'),
      p(' - Relationship'),
      p(' - Gender'),
      p(' - Total work hours per week: must be from 1 to 99')
    )
  )
)

1 个答案:

答案 0 :(得分:0)

我通过使用actionButton代替submitButton找到了解决方案。但是,我认为使用submitButton必须有一个理想的解决方案。