一旦用户按下Shiny中的按钮,我就会尝试简单地更新数据框的一列。关于当前显示的数据帧如何传递到服务器端功能,我有点困惑。
按下按钮后,列cyl应增加10.如果再次按下该按钮,列应重新计算并再乘以10等。
到目前为止,我已经这样做了,但按下按钮时似乎没有任何事情发生。
---
title: "My dataframe refresh"
output: html_document
runtime: shiny
---
```{r, echo=FALSE}
library(EndoMineR)
shinyApp(
ui <- fluidPage(
DT::dataTableOutput("mytable"),
actionButton("do", "Click Me")
),
server = function(input, output,session) {
#Load the mtcars table into a dataTable
output$mytable = DT::renderDataTable({
mtcars
})
#A test action button
observeEvent(input$do, {
renderDataTable(mtcars$cyl*10)
})
},
options = list(height = 800)
)
```
答案 0 :(得分:6)
试试这个:
library(shiny)
library(DT)
RV <- reactiveValues(data = mtcars)
app <- shinyApp(
ui <- fluidPage(
DT::dataTableOutput("mytable"),
actionButton("do", "Click Me")
),
server = function(input, output,session) {
#Load the mtcars table into a dataTable
output$mytable = DT::renderDataTable({
RV$data
})
#A test action button
observeEvent(input$do, {
RV$data$cyl <- RV$data$cyl * 10
})
}
)
runApp(app)
我总是存储我的数据框,特别是如果它们应该在reactiveValues
列表中被动。之后,您只需渲染数据,然后在观察步骤中覆盖原始数据框。您必须显式覆盖数据才能存储结果,mtcars$cyl * 10
不会影响mtcars数据框。