gpt4 book ai didi

r - 使用 Shiny 的应用程序创建响应式(Reactive)数据框

转载 作者:行者123 更新时间:2023-12-05 00:52:14 24 4
gpt4 key购买 nike

我试图让这种 react 性返回一个我可以操纵的数据框。

avghour <- reactive({
result <- data.frame()
start_date <- as.numeric(unlist(input$i6[1]))
end_date <- as.numeric(unlist(input$i6[2]))
mkw <- maxkwpeakdates[(maxkwpeakdates >= start_date & maxkwpeakdates <=
end_date) & !is.na(maxkwpeakdates), ]
mkw <- na.omit(mkw)
mopkw <- maxonpeakkwdates[(maxonpeakkwdates >= x &
maxonpeakkwdates <= y) & !is.na(maxonpeakkwdates),
]
mopkw <- na.omit(mopkw)
mkwhour <- data.frame(as.data.frame(apply(mkw, 2, hour)))
mopkwhour <- as.data.frame(apply(mopkw, 2, hour))
mkwhour <- as.data.frame(sapply(mkwhour, tabulate, 24))
mopkwhour <- as.data.frame(sapply(mopkwhour, tabulate, 24))
mkwhour <- as.data.frame(apply(mkwhour, 1, mean))
mopkwhour <- as.data.frame(apply(mopkwhour, 1, mean))
result <- data.frame(mkwhour, mopkwhour)
colnames(result) <- c("1", "2")
return(result)
})

我希望能够绘制结果数据框。当我调试我的应用程序时,结果发现 avghour 被保存为一个函数而不是一个数据框。 react 所需的值迫使 react 正确更新,但我无法将结果保存为数据框。我是否正确使用响应式(Reactive)?我需要以另一种方式这样做吗?

更新
I have changed my server code to be like this:

server <- function(input, output) {

averages <- reactiveValues(hourly = avghour(input$'i6'[1], input$'i6'[2]))

observeEvent(input$submit,{
averages$hourly <- avghour(input$'i6'[1], input$'i6'[2])
})

output$"1" <- renderPlotly({
plot_ly() %>%
add_trace(type = 'bar',
data=averages$hourly,
x=~'1',
y=~'2')
})

}

getHourlyAverage 的功能与我之前的功能相同。现在我收到 error: operation not allowed without an active reactive context.如何在用户输入中使用observeEvent 和reactiveValues?

最佳答案

我建议将数据帧存储在所谓的 reactiveValues 中列表。然后它们具有与使用 reactive 计算的事物相同的 react 特性。函数(因为其他依赖于它们的 react 会在原始变化时被触发),但是你可以获取它们的所有元素来操纵它们。

一般来说,建议只使用响应式(Reactive)函数就可以逃脱的简单程序应该这样做,但我确实发现当事情变得更复杂时,经常会导致死胡同,因为没有合乎逻辑的地方来存储和更新您的数据.

请注意 reactiveValues是一个列表,您可以在其中存储多个东西,从而将相关的东西放在一起。该列表中的所有成员都将是被动的。

这是一个使用 plotly 的非常简单的示例:

library(plotly)
library(shiny)

ui <- shinyUI(fluidPage(
plotlyOutput("myPlot"),
actionButton("regen","Generate New Points")
))

server <- shinyServer(function(input, output) {

n <- 100
rv <- reactiveValues(m=data.frame(x=rnorm(n),y=rnorm(n)))

observeEvent(input$regen,{
rv$m <- data.frame(x=rnorm(n),y=rnorm(n))
})

output$myPlot <- renderPlotly({
plot_ly() %>% add_markers(data=rv$m,x=~x,y=~y )
})
})
shinyApp(ui, server)

这是一个屏幕截图,可帮助对其进行可视化:

enter image description here

关于r - 使用 Shiny 的应用程序创建响应式(Reactive)数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43217170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com