提交后清除文本输入

时间:2013-10-09 07:35:46

标签: r shiny shiny-server

我在这里向数据框添加新列。
以下代码运行良好。添加新列后,“变量名称”和“公式”中的文本应为空。

你能帮帮我吗。

ui.R

library(shiny)
shinyUI(pageWithSidebar(
  headerPanel( "", ""),
  sidebarPanel(

    wellPanel(

      fileInput('file', 'Select csv file', accept=c('text/csv') ),

      checkboxInput('header', 'Header', TRUE),

      gsub("label class=\"radio\"", "label class=\"radio inline\"",
           radioButtons('sep', 'Separator', c(Comma=',', Semicolon=';', Tab='\t' )))

    ),

    wellPanel(
      checkboxInput('addcol', 'Create New Variable', FALSE),

      conditionalPanel(condition="input.addcol!=0",
                       textInput('newvar', "Variable name","" ),
                       textInput('newformula', "Formula",""),
                       actionButton("addvar","Apply"))      
    )
    ),

  mainPanel(
    tabsetPanel(
      tabPanel(tableOutput('contents'))
    )
  )

))

server.R

library(shiny)
shinyServer(function(input,output,session){

  dataset = reactive({
    inFile<-input$file
    if(is.null(inFile))
      return(NULL)
    read.csv(inFile$datapath, header=input$header, sep=input$sep)
  })


  alterdata = reactive({
    if(input$addcol!=0&&input$addvar!=0){
      isolate({
        df<-dataset()
        df$Var1<-eval(parse(text=input$newformula), df)
        df<-rename(df, c(Var1=input$newvar))
        df
      })
    }
    else
    {
      dataset()
    }
  })

  output$contents<-renderTable({
    if (is.null(input$file)) { return() }                            
    alterdata()
  })

})

2 个答案:

答案 0 :(得分:3)

您可以使用updateTextInput().这样做help on that function

这是更新后的server.R的样子:

修改了Server.R

请注意,alterdata()反应函数中添加了两行。

library(shiny)
library(plyr)
shinyServer(function(input,output,session){

  dataset = reactive({
    inFile<-input$file
    if(is.null(inFile))
      return(NULL)
    read.csv(inFile$datapath, header=input$header, sep=input$sep)
  })


  alterdata = reactive({
    if(input$addcol!=0&&input$addvar!=0){
      isolate({
        df<-dataset()
        df$Var1<-eval(parse(text=input$newformula), df)
        df<-rename(df, c(Var1=input$newvar))

        #add these two lines
        updateTextInput(session, "newvar", value = " ")     
        updateTextInput(session, "newformula", value = " ")     

        df        
      })
    }
    else
    {
      dataset()
    }
  })


  output$contents<-renderTable({
    if (is.null(input$file)) { return() }                            
    alterdata()    
  })

})

请注意,我必须包含plyr,以便可以调用rename

答案 1 :(得分:0)

您可以在此处通过Deans Shinyjs包轻松实现这一目标.https://rdrr.io/cran/shinyjs/man/reset.html