我想跟踪用户刷新我的Shiny vis的次数。
我想我只会在反应区域之外设置一个计数器
number <- 0
并在每次反应块中的代码触发时添加一个更新。
但它不起作用。
思路:
使计数器成为全局var?
愚蠢的想法,不起作用
将 number <- 0
放入反应区域?
的
当然这不是解决方案
我不确定要去哪个方向。有人有什么想法吗?
require(shiny)
number <- 0
runApp(list(ui = pageWithSidebar(
headerPanel("This is a test"),
sidebarPanel(
helpText("This is a test"),
sliderInput("range",
label = "Pick a number:",
min = 0, max = 100, value = 0)
),
mainPanel(textOutput("text1"),
htmlOutput("text")
)
),
server = function(input, output) {
number <- number + 1
output$text <- renderUI({
str <- paste("You have chosen:",
input$range)
HTML(paste(str, sep = '<br/>'))
View(number)
})
}
)
)
答案 0 :(得分:4)
Shiny有reactiveValues
就像环境一样 - 它们通过引用传递,因此您可以使用反应式表达式中的常规赋值运算符为它们赋值。例如,
library(shiny)
ui <- pageWithSidebar(
headerPanel("This is a test"),
sidebarPanel(sliderInput("range", "Pick", 0, 100, 10)),
mainPanel(htmlOutput("text"))
)
server <- function(session, input, output) {
vals <- reactiveValues(count = -1)
observeEvent(input$range, vals$count <- vals$count + 1)
output$text <- renderUI({
HTML(paste(sprintf("You have chosen: %s</br>", vals$count)))
})
}
shinyApp(ui, server)
旁注:您也可以使用<<-
作为全局变量进行操作,但我会说这是一个坏主意,因为<<-
在环境中向后搜索,我认为它可能会有惊人的结果。