我正在尝试为我正在教授的课程编写一个Shiny应用程序,从数据集中抽取随机样本并计算摘要统计数据。每当我按下UI上的重置按钮时,都应该采样一个新的子集。到目前为止,这是我的代码:
shinyServer(function(input, output) {
# Output for Ch. 1 Problems: Central Tendency
# Prepare data
observeEvent(input$Ch1.Prob.CT.reset, {
Ch1.Prob.CT.n <- sample(8:12, 1)
Ch1.Prob.CT.obs <- sample(1:nrow(cars), Ch1.Prob.CT.n)
})
data <- eventReactive(input$Ch1.Prob.CT.reset, {
cars[Ch1.Prob.CT.obs, 'dist', drop=F]
})
# Outputs
output$Ch1.Prob.CT.Data <- renderDataTable({
data()
})
output$Ch1.Prob.CT.Mean.out <- renderUI({
if (is.na(input$Ch1.Prob.CT.Mean.in)) { # Error checking
p("No answer provided")
} else if (round(input$Ch1.Prob.CT.Mean.in, digits = 4) == round(mean(Ch1.Prob.CT.data[,1]), digits = 4)) {
p("Correct", style = "color:green")
} else {
p("Incorrect", style = "color:red")
}
})
})
问题是样本不是随机的;每次都是一样的。即使我按下重置按钮,样本也与之前的样本完全相同。
为什么Shiny不随机化?我怎样才能让它再次随机化?
答案 0 :(得分:0)
添加
等行set.seed(as.integer(Sys.time()))
在您需要随机数之前
答案 1 :(得分:0)
这样的代码:
observeEvent(input$xxx, {
x <- ...
})
f <- eventReactive(input$xxx, {
[do something with x]
})
不起作用。
你可以简单地删除观察者并执行:
f <- eventReactive(input$xxx, {
x <- ...
[do something with x]
})
如果要在观察者中使用受修改的变量,则必须使用反应列表,如下所示:
values <- reactiveValues()
values$x <- [initial value of x]
observeEvent(input$xxx, {
values$x <- ...
})
(此外,请勿在闪亮元素的名称中使用一些点(.
)。)