【发布时间】:2019-07-10 10:57:53
【问题描述】:
我正在尝试在 Shiny 应用程序中包含一个数据集,该应用程序首先被读取并按原样使用,例如通过将其显示为表格。我希望用户能够操作此数据集并使用更新后的数据集更新相同的表输出。
我可以让这两个部分分别工作 - 我可以显示原始数据,也可以显示反应性更新数据。但我不知道如何让两者都使用相同的数据集?下面的代码是一个使用 iris 的简单示例,它尝试显示原始数据集,然后对其进行 rbinding,以便在您点击“运行”时在更新的数据集中显示两倍的行数。请注意,我已将数据转换为 data.table,因为我的实际代码将大量使用 data.table。
library(shiny)
library(data.table)
iris <- as.data.table(iris)
ui <- fluidPage(
fluidRow(column(4, actionButton("run", "Run"))),
fluidRow(column(12, tabPanel(title = "tab1",
DT::dataTableOutput("table1"))))
)
server <- function(input, output, session) {
irisdata <- reactive({
irisdata <- iris
})
irisdata <- eventReactive(input$run, {
rbind(irisdata(), iris, fill = TRUE)
})
output$table1 <- DT::renderDataTable({
irisdata()
})
}
shinyApp(ui, server)
rbind 导致:错误:嵌套太深:无限递归/选项(表达式=)?
我想这是可以预期的,因为它是自引用的,但我不知道如何编写代码?
【问题讨论】:
-
嗨,解决方案是使用
reactiveValues和observe而不是reactive。有关更多信息,请参阅this thread。真的很像你的问题 -
这很有帮助,感谢您的链接。这个帖子也很有帮助:stackoverflow.com/questions/50251813/…