在 R shiny 应用程序中捕获 editable datatable 的输出以用于另一个 table
capture output of editable datatable in R shiny app to be used in another table
我正在尝试捕获对数据表 (mytable) 的编辑,然后创建反映编辑的第二个数据表 (new_table)。有一个单独的 input$rows 和 input$columns 决定了原始 mytable 中有多少 rows/columns.
我似乎无法捕获原始 mytable 的输出。
非常感谢任何帮助
library(DT)
shinyApp(
ui = fluidPage(
textInput("rows",
"enter rows",
value = "2"),
textInput("columns",
"enter columns",
value = "3"),
DTOutput('mytable'),
DTOutput("new_table")
),
server = function(input, output) {
data <- reactive({
as.data.frame(matrix(" ",
as.numeric(input$rows),
as.numeric(input$columns)))
})
dfon <- reactiveValues(data = NULL)
output$mytable <- renderDataTable({
datatable(
data(),
editable = 'cell'
)
})
observeEvent(input$mytable_cell_edit, {
info = input$mytable_cell_edit
str(info)
#i = info$row
#j = info$col + 1 # offset by 1
#v = info$value
#dfon$top[i, j] <<- DT::coerceValue(v, dfon$top[i, j])
dfon$data <<- editData(dfon$data, info)
})
output$new_table <- renderDataTable({
datatable(dfon$data)
})
}
)
最简单的解决方案是:
library(shiny)
library(DT)
library(tidyverse)
shinyApp(
ui = fluidPage(
textInput("rows",
"enter rows",
value = "2"
),
textInput("columns",
"enter columns",
value = "3"
),
DTOutput("mytable"),
DTOutput("new_table")
),
server = function(input, output) {
data <- reactive({
req(input$rows, input$columns)
as.data.frame(matrix(
" ",
as.numeric(input$rows),
as.numeric(input$columns)
))
})
dfon <- reactiveValues(data = NULL)
observe({
dfon$data <- data()
})
output$mytable <- renderDataTable({
datatable(
data(),
editable = "cell"
)
})
observeEvent(input$mytable_cell_edit, {
info <- input$mytable_cell_edit
i <- info$row
j <- info$col
v <- info$value
dfon$data[i, j] <- v
})
output$new_table <- renderDataTable({
datatable(dfon$data)
})
}
)
我们可以使用 dataTableProxy,但它适用于新行,新列比较棘手。
我正在尝试捕获对数据表 (mytable) 的编辑,然后创建反映编辑的第二个数据表 (new_table)。有一个单独的 input$rows 和 input$columns 决定了原始 mytable 中有多少 rows/columns.
我似乎无法捕获原始 mytable 的输出。 非常感谢任何帮助
library(DT)
shinyApp(
ui = fluidPage(
textInput("rows",
"enter rows",
value = "2"),
textInput("columns",
"enter columns",
value = "3"),
DTOutput('mytable'),
DTOutput("new_table")
),
server = function(input, output) {
data <- reactive({
as.data.frame(matrix(" ",
as.numeric(input$rows),
as.numeric(input$columns)))
})
dfon <- reactiveValues(data = NULL)
output$mytable <- renderDataTable({
datatable(
data(),
editable = 'cell'
)
})
observeEvent(input$mytable_cell_edit, {
info = input$mytable_cell_edit
str(info)
#i = info$row
#j = info$col + 1 # offset by 1
#v = info$value
#dfon$top[i, j] <<- DT::coerceValue(v, dfon$top[i, j])
dfon$data <<- editData(dfon$data, info)
})
output$new_table <- renderDataTable({
datatable(dfon$data)
})
}
)
最简单的解决方案是:
library(shiny)
library(DT)
library(tidyverse)
shinyApp(
ui = fluidPage(
textInput("rows",
"enter rows",
value = "2"
),
textInput("columns",
"enter columns",
value = "3"
),
DTOutput("mytable"),
DTOutput("new_table")
),
server = function(input, output) {
data <- reactive({
req(input$rows, input$columns)
as.data.frame(matrix(
" ",
as.numeric(input$rows),
as.numeric(input$columns)
))
})
dfon <- reactiveValues(data = NULL)
observe({
dfon$data <- data()
})
output$mytable <- renderDataTable({
datatable(
data(),
editable = "cell"
)
})
observeEvent(input$mytable_cell_edit, {
info <- input$mytable_cell_edit
i <- info$row
j <- info$col
v <- info$value
dfon$data[i, j] <- v
})
output$new_table <- renderDataTable({
datatable(dfon$data)
})
}
)
我们可以使用 dataTableProxy,但它适用于新行,新列比较棘手。