这是对上一个问题的跟进:Add values to a reactive table in Shiny
也许这是一个菜鸟问题,但值得一试。这是我的第一个Shiny应用程序。
我正在制作一个Shiny应用程序,允许用户将他们输入的输入和值存储到data.frame中。这样他们就可以比较输出中的值。我已经模拟了我想要存储3列的代码:输入A和B,以及基于输入A和B的函数。
我认为我未能理解评估被动反应是我的缺点,所以我转向社区寻求帮助。如果我只是存储输入而不是反应函数'calcAB()',我可以使代码工作。一旦我包含该功能,一切都会崩溃。我收到一个错误:
Warning: Error in [<-.data.frame: replacement has 2 items, need 3
如果我删除了calcAB()函数,我可以毫无问题地保存输入。一旦我包含它,我得到上述错误。问题是如何将该反应函数的输出存储在data.frame中?
我的代码如下:
UI代码:
shinyUI(fluidPage(
# Application title
titlePanel("Test Save Data to DF"),
# Sidebar with inputs A and B
sidebarLayout(
sidebarPanel(
sliderInput("A",
"Input A",
min = 1,
max = 50,
value = 30),
numericInput("B",
"Input B",
min = 1,
max = 30,
value = 10),
# Action Button to save the inputs to a data.frame
actionButton('update', label = 'Update')
),
mainPanel(
tableOutput('testTable')
)
)
))
服务器代码:
shinyServer(function(input, output) {
# My reactive function
calcAB <- reactive({
input$A * input$B
})
values <- reactiveValues()
values$df <- data.frame('A' = numeric(0), 'B' = numeric(0),
'AB' = numeric(0))
newEntry <- observe({
if(input$update >0) {
newLine <- isolate(c(input$A, input$B, calcAB()))
isolate(values$df[nrow(values$df)+1,] <- c(input$A, input$B, calcAB()))
})
output$testTable <- renderTable({values$df})
}
答案 0 :(得分:1)
尝试使用此代码:
shinyServer(function(input, output) {
calcAB <- reactive(input$A * input$B)
values <- reactiveValues(df = data.frame('A' = numeric(0), 'B' = numeric(0), 'AB' = numeric(0)))
newEntry <- observe({
if(input$update >0) {
values$df <- isolate(rbind(values$df,data.frame('A' =input$A, 'B' = input$B,'AB' = calcAB())))
}})
output$testTable <- renderTable({values$df})
})