gpt4 book ai didi

r - 如何将无功输出值存储在要在函数中使用的向量中?

转载 作者:行者123 更新时间:2023-12-01 12:20:42 26 4
gpt4 key购买 nike

这是问题的延伸

How to isolate the output of a reactive (function) and save to a data.frame?

基本上,我想根据具有预定值和附加值的向量构建一个表。我想将原始向量和包含该向量前 4 个值的滚动平均值的列显示为表输出。例如,如果用户添加了值 200,我将拥有

d <- c(rep(100,4),200) 

并使用 zoo::rollapply() 我得到了 d 的前 4 个值的滚动平均值

md <- rollapply(d , mean , fill = NA, width = list(-1:-4))

预期结果

cbind(d,md)

d md
[1,] 100 NA
[2,] 100 NA
[3,] 100 NA
[4,] 100 NA
[5,] 200 100

在我 Shiny 的应用程序中,我无法使用我的功能,当我添加一个值时应用程序关闭。但是,如果我使用其他函数,如 input$c1 + 5,它就可以工作。我认为问题是我不知道如何捕获更新的向量并使用它来运行需要向量作为输入的函数。此外,要运行该应用程序,我需要在新列中匹配相同数量的行。

这是我的用户界面代码:

library(shiny)

fluidPage(
sidebarPanel(textInput("c1","example"),

actionButton("update", "Update Table")
),

mainPanel(tableOutput("example")

)
)

和服务器

library(shiny)
library(zoo)

function(input, output) {

#Example
d <- c(rep(100,4))
m <- c(rep(100,4))

md <- reactive(
rollapply(values$df , mean , fill=NA , width=list(-1:-4))
)

values <- reactiveValues(df = data.frame('D' = d, 'M_D'= m))
newEntry <- observe({
if(input$update > 0) {
values$df <- isolate(rbind(values$df,data.frame('D' =input$c1,
'M_D' = md())))
}
})

output$example <- renderTable({values$df})

}

最佳答案

所以我想说我们使用了太多不同的 Shiny 机制,而且它们会互相绊倒。我做了以下更改:

  • observe 更改为 observeEvent,以便将计算限制在您按下 update 按钮时。
  • 取消了 isolate 用法,因为它在 observeEvent 中不需要,而不是 observe
  • 摆脱了响应式 md() 函数,因为您已经将该数据存储在 reactiveValues 列表中。
  • 使 rollingapply 仅对相关列而不是整个数据框进行操作。
  • 稍微清理了语法 - 去掉了多余的引号,c(rep(...)) 中的 c()
  • 稍微压缩一下。
  • as.numeric 添加到 input$c1 处理中,否则它会导致该列转换为因子并更改其值。

代码如下:

library(shiny)
library(zoo)

u <- fluidPage(
sidebarPanel(textInput("c1","example"),
actionButton("update", "Update Table")
),
mainPanel(tableOutput("example")
)
)
s <- function(input, output) {

#Example
d <- rep(100,4)
m <- rep(100,4)

values <- reactiveValues(df = data.frame(D=d, M_D=m))

newEntry <- observeEvent(input$update,{
d_new <- c(values$df$D,as.numeric(input$c1))
m_d_new <- rollapply(d_new, mean , fill=NA , width=list(-1:-4))
values$df <- data.frame(D=d_new,M_D=m_d_new)
})
output$example <- renderTable({values$df})
}
shinyApp(u,s)

在输入 200 并按几次 Update Table 后会产生以下结果:

enter image description here

关于r - 如何将无功输出值存储在要在函数中使用的向量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44345332/

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