3

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

请你帮助我好吗。

用户界面

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'))
    )
  )

))

服务器.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()
  })

})
4

2 回答 2

3

您可以通过使用updateTextInput().Here's the help on that function来做到这一点。

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

修改服务器.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可以调用它。

于 2013-10-09T21:41:36.713 回答
0

您可以在这里通过 Deans shinyjs 包轻松实现此目的。 https://rdrr.io/cran/shinyjs/man/reset.html

于 2020-11-17T18:14:41.927 回答