此问题是针对以下问题的后续措施
Display table and recompute one column based on sliders
我想在一个变量中捕获计算出的分数(仅呈现,而不是根据我的理解存储),以便每当计算出它时,我也可以更新关联的直方图。
这是我到目前为止的代码:
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
tmp <- reactiveVariable(score=df['score'])
#### 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),
hr(),
wellPanel(style="background:white",
plotOutput("hist")
)
),
mainPanel(
tabsetPanel(
id = 'dataset',
tabPanel("df", dataTableOutput("df"))
)
)
)
)
#### SERVER ####
server <- function(input, output) {
sliderValues <- reactive({
df['score'] <- df[,input$x]^input$y + input$z
tmp$score <- df['score']
df
})
output$df <- renderDataTable(sliderValues())
output$hist <- renderPlot(hist({tmp$score}))
}
#### RUN ####
shinyApp(ui = ui, server = server)
但是,这只会给我错误“ hist.default:'x'必须是数字”。 我究竟做错了什么?我以为保存到 reactiveVariable 变量会调用使用该变量的反应式函数(在这种情况下为直方图的呈现)。
答案 0 :(得分:1)
几个问题。请从此开始
library(shiny)
#### INIT ####
df <- data.frame(
a=1:10,
b=10:1
)
#### UI ####
ui <- fluidPage(
title = "Examples of DataTables",
sidebarLayout(
sidebarPanel(
selectInput("x", "x:",names(df)),
sliderInput("y", "y:",
min = 0, max = 10,step = 0.5,
value = 0.5),
sliderInput("z", "z:",
min = 1, max = 100,
value = 2),
hr(),
wellPanel(style="background:white",
plotOutput("hist")
)
),
mainPanel(
dataTableOutput("df")
)
)
)
#### SERVER ####
server <- function(input, output) {
sliderValues <- reactive({
df$score <- df[,input$x]^input$y + input$z
df
})
output$df <- renderDataTable({sliderValues()})
output$hist <- renderPlot({
hist(sliderValues()$score)})
}
#### RUN ####
shinyApp(ui = ui, server = server)