r - 如何根据小部件输入向表中添加行?
问题描述
我正在尝试在单击按钮时根据小部件选择将行添加到数据框中。
我已经把observeEvent
里面的renderTable
,但应用程序返回一个错误:不能强制类“c(“观察者”,“R6”)”到一个data.frame。
这是要添加行的测试数据框:
> 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
解决方案
如果您只想显示您的表格,您应该将 DF 放在observeEvent 之后,因为“observeEvent 返回一个观察者引用类对象”所以当您有一个时,renderTable
您必须返回一个矩阵或 data.frame。
server <- function(input, output) {
output$table <- renderTable({
observeEvent(input$save, {
l <- nrow(DF)
DF[l+1,] <- list(input$add, input$add)
})
DF
})
}
编辑1:如果我很好理解您的要求,您不需要保存数据框但您想添加行,它可能是相同的,您只需要使用rbind
以下帖子:
推荐阅读
- java - mavlink 或任何其他无线协议如何与软件一起使用?
- python - Django Rest Framework 使用“permissions.IsAuthenticated”会引发错误
- android - 使用“复制代码”按钮发送包含验证码的短信
- google-cloud-platform - 执行 gcloud alpha cloud-shell ssh 时从 PuTTY 获取“服务器拒绝我们的密钥”
- python - 创建自己的kafkaproducer
- angular - 错误:没有为“[object Object]”找到 NgModule 元数据
- vba - 将多个工作簿合并到当前工作簿中的单个工作表中
- sql - SQL 选择唯一值并合并其他列中的相应值
- php - WP Job Manager 更改搜索结果顺序
- javascript - 如何设置带有可选“(”和“)”的正则表达式,在使用时需要两者?