我试图在单击按钮时根据小部件的选择将行添加到数据框。
我已将observeEvent
放在renderTable
内,但是应用程序返回错误:无法将类“ c(“ Observer”,“ R6”)“强制转换为数据。框架。
这是向以下行添加数据的测试数据框:
> DF <- data.frame(matrix(c("A","B"), ncol = 2), stringsAsFactors = FALSE)
> colnames(DF) <- c("col1", "col2")
> DF
col1 col2
1 A B
这是闪亮的应用程序代码:
library(shiny)
DF <- data.frame(matrix(c("A","B"), ncol = 2), stringsAsFactors = FALSE)
colnames(DF) <- c("col1", "col2")
ui <- fluidPage(
titlePanel("Save input"),
sidebarLayout(
sidebarPanel(
wellPanel(
h3("Widget 1"),
radioButtons("add", "Letter", c("A", "B", "C"))
),
wellPanel(
h3("Save button"),
actionButton("save", "Save")
)
),
mainPanel(
tableOutput("table")
)
)
)
server <- function(input, output) {
output$table <- renderTable({
DF
observeEvent(input$save, {
l <- nrow(DF)
DF[l+1,] <- list(input$add, input$add)
})
})
}
shinyApp(ui = ui, server = server)
你知道怎么了吗?
更新:
使用@Rémi回答,错误消失了,但应用程序未向表中添加新行:app
答案 0 :(得分:0)
如果只想显示表,则应将DF放在observeEvent之后,因为“ observeEvent返回观察者参考类对象”,因此当您拥有renderTable
时,必须返回矩阵或data.frame。 / p>
server <- function(input, output) {
output$table <- renderTable({
observeEvent(input$save, {
l <- nrow(DF)
DF[l+1,] <- list(input$add, input$add)
})
DF
})
}
编辑1:
如果我很了解您的请求,则无需保存数据框,但您想添加行,也可以相同,只需使用rbind
作为以下文章的摘要即可: