我在这里向数据框添加新列。
以下代码运行良好。添加新列后,“变量名称”和“公式”中的文本应为空。
你能帮帮我吗。
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()
})
})
答案 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