【发布时间】:2017-06-03 15:06:37
【问题描述】:
这是问题的延伸
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() 我得到了前 4 个 d 值的滚动平均值
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
在我闪亮的应用程序中,我无法使用我的功能,当我添加值时应用程序关闭。但是,如果我使用其他功能,例如 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})
}
【问题讨论】: