我有下面的代码将文本框添加到Shinyapp,但是我希望用户能够加载以前的值并保存现有的值
我使用的代码是:
library(shiny)
ui <- shinyUI(fluidPage(
sidebarPanel(
actionButton("add_btn", "Add Textbox"),
actionButton("rm_btn", "Remove Textbox")
),
mainPanel(uiOutput("textbox_ui"))
))
server <- shinyServer(function(input, output, session) {
counter <- reactiveValues(n = 0)
observeEvent(input$add_btn, {counter$n <- counter$n + 1})
observeEvent(input$rm_btn, {
if (counter$n > 0) counter$n <- counter$n - 1
})
textboxes <- reactive({
n <- counter$n
if (n > 0) {
lapply(seq_len(n), function(i) {
textInput(inputId = paste0("textin", i),
label = paste0("Textbox", i), value = "Hello World!")
})
}
})
output$textbox_ui <- renderUI({ textboxes() })
})
shinyApp(ui, server)
我找到了下面的代码,这些代码增加了加载并保存到文本框中,但是我不确定如何将两者组合在一起
ui <- shinyUI(fluidPage(
textInput(inputId = 'inputsLocation', label = 'Inputs Location', value = "C:/Users/dvora/Downloads/user_inputs.csv"),
actionButton('load_inputs', 'Load inputs'),
br(),
br(),
textInput("textbox_ui", "Text"),
actionButton('save_inputs', 'Save inputs')
))
server <- shinyServer(function(input, output,session) {
observeEvent(input$load_inputs, {
# Load inputs
uploaded_inputs <- read.csv(input$inputsLocation)
# Update each input
for(i in 1:nrow(uploaded_inputs)){
updateNumericInput(session,
inputId = uploaded_inputs$inputId[i],
value = uploaded_inputs$value[i])
}
})
observeEvent(input$save_inputs, {
# Define inputs to save
inputs_to_save <- c('textbox_ui')
# Declare inputs
inputs <- NULL
# Append all inputs before saving to folder
for(input.i in inputs_to_save){
inputs <- append(inputs, input[[input.i]])
}
# Inputs data.frame
inputs_data_frame <- data.frame(inputId = inputs_to_save, value = inputs)
# Save Inputs
write.csv(inputs_data_frame, file = input$inputsLocation, row.names = FALSE)
})
})
shinyApp(ui=ui,server=server)
如果我的输出中只有一个文本框可以加载并保存