我正在开发一个闪亮的仪表板应用程序,在该应用程序中,我试图在单击按钮时向表中添加新行。单击时,将从多个输入元素中收集数据,收集在列表中,然后将其添加为新行。但是,当添加该行时,以前的所有行都变为"NA"。
服务器代码:
RowList <- c()
dfRowList <<- data.frame(matrix(ncol = 13, nrow = 0))
colnames(dfRowList) <<- c(# list of row properties #)
observeEvent(input$AddRow, {
Newrow <- paste0("R", length(RowList) + 1)
RowList <<- append(RowList, NewRow)
RProps <- c()
RProps <- c(NewRow)
for (prop in c(# list of row properties #)){
Propvalue <- input[[paste0("R", prop)]]
RProps <- append(RProps, Propvalue)
}
dfRowList[length(RowList),] <- RProps
output$RowList <- renderTable(dfRowList)
})
当使用rbind((时,不会创建新行,只有1行被新值替换,列名也会被改写:/
我检查了所有其他值。创建新行名、属性和列表效果良好。当我使用View(dfRowList(查看数据帧本身时,它也显示了相同的问题(因此这不是渲染问题(。因此,仅添加行是不起作用的。
有人知道这里发生了什么吗?
提前感谢!
基于已经发布的存储库的最小工作示例:
library(shiny)
library(data.table)
df = data.frame(Column1=character(), Column2=numeric())
ui <- fluidPage(
sidebarPanel(
textInput("input1", "First Input: (character)", "test"),
numericInput("input2", "Second Input: (numeric)", min = 1, max = 10, value = 1),
actionButton("add", "Add Data"),
),
mainPanel(
tabsetPanel(
tabPanel("table", value = 1, DT::dataTableOutput("showtable"))
)
)
)
server <- function(input, output) {
data_table <- reactiveVal(df)
observeEvent(input$add, {
t = rbind(data.frame(Column1 = input$input1,
Column2 = input$input2),data_table())
data_table(t)
})
output$showtable <- DT::renderDataTable({
data.table::data.table(data_table())
})
}
# Run the application
shinyApp(ui = ui, server = server)