Display table and recompute one column based on sliders

别等时光非礼了梦想. 提交于 2020-06-01 07:32:25

问题


I want to create a small shiny app to explore a scoring function that I am writing for a set of data observations. This is my first shiny app so bear with me.

What I want to show is the data table where one column is computed by a function (let's say f(x) = x^2 + y) where x is another (numeric) column in the table and y should be adjustable with a slider in the sidebar.

I want to make the table reactive, so that as soon as the slider is adjusted, the content that is displayed will be updated. Does anyone have a link to a tutorial (I could not find a similar problem) or a suggestion how to handle this. If so, please let me know!

This is the code I have so far:

library(shiny)
#### INIT ####
x <- 1
y <- 0.5
z <- 2
df <- data.frame(
  a=1:10,
  b=10:1
)
df['score'] <- df[,x]^y + z


#### UI ####
ui <- fluidPage(
  title = "Examples of DataTables",
  sidebarLayout(
    sidebarPanel(
      sliderInput("x", "x:",
                  min = 0, max = ncol(df),
                  value = 1),
      sliderInput("y", "y:",
                  min = 1, max = 10,
                  value = 1),
      sliderInput("z", "z:",
                  min = 1, max = 100,
                  value = 20)
    ),
    mainPanel(
      tabsetPanel(
        id = 'dataset',
        tabPanel("df", dataTableOutput("df"))
      )
    )
  )
)


#### SERVER ####
server <- function(input, output) {
  sliderValues <- reactive({
    df['score'] <- df[,input$x]^input$y + input$z
   })

  sliderValues()
  output$df<- renderDataTable(df)      
}

#### RUN #### 
shinyApp(ui = ui, server = server)

回答1:


Just make the data.frame you actually plot reactive. For example

server <- function(input, output) {
  calcualtedValues <- reactive({
    df['score'] <- df[,input$x]^input$y + input$z
    df
  })
  output$df<- renderDataTable(calcualtedValues())      
}

Here the calcualtedValues reactive element returns a new data.frame when the input is updated, and then you actually render that updated data.frame rather than the original data.frame each time.



来源:https://stackoverflow.com/questions/57791247/display-table-and-recompute-one-column-based-on-sliders

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!