r - 从 reactiveValue 列表填充数据表
问题描述
我希望根据从 reactiveValues 列表中获得的值将行添加到数据表中。我这个例子是基于之前的一篇文章。
理想的工作流程如下: 1. 在表中
选择“添加”
2. 验证“名称”/“动机”组合是否尚未被选择3.使用“删除”选项按钮
添加行
4. “删除”按钮将从表中删除行并重新生成df
dfout
我目前遇到的问题是dfout
使用 reactiveValues 列表自动填充表格。我相信这是因为 reactiveValue 表不能作为输入 reactiveValue 列表。
library(shiny)
library(DT)
library(purrr)
shinyApp(
ui <- fluidPage(
DT::dataTableOutput("data"),
DT::dataTableOutput("dfoutput")
),
server <- function(input, output) {
name_mot <-reactiveValues(l = c())
shinyInput <- function(FUN, len, id, ...) {
inputs <- character(len)
for (i in seq_len(len)) {
inputs[i] <- as.character(FUN(paste0(id, i), ...))
}
inputs
}
df <- reactiveValues(data = data.frame(
Name = c('Dilbert', 'Alice', 'Wally', 'Ashok', 'Dogbert'),
Motivation = c(62, 73, 3, 99, 52),
Add = shinyInput(actionButton, 5, 'button_', label = "+", onclick = 'Shiny.onInputChange(\"add_button\", this.id)' ),
stringsAsFactors = FALSE,
row.names = 1:5
))
output$data <- DT::renderDataTable(
df$data, server = FALSE, escape = FALSE, selection = 'none'
)
observeEvent(input$add_button, {
selectedRow <- as.numeric(strsplit(input$add_button, "_")[[1]][2])
toaddstring = paste(df$data[selectedRow,"Name"],df$data[selectedRow,"Motivation"],sep=":")
if(!toaddstring %in% name_mot$l){
name_mot$l = c(name_mot$l, toaddstring)
}
})
#dfout <- reactiveValues(data = data.frame(
# Name = str_split(name_mot$l, ":") %>% map_chr(`[`, 1),
# Motivation = str_split(name_mot$l, ":") %>% map_chr(`[`, 2),
# shinyInput(actionButton, 1, 'button_', label = "-", onclick = 'Shiny.onInputChange(\"remove_button\", this.id)' ),
# stringsAsFactors = FALSE
#))
# output$dfoutput <- DT::renderDataTable(
# dfout$data, server = FALSE, escape = FALSE, selection = 'none'
# )
}
)
解决方案
推荐阅读
- hyperledger-fabric - 无法连接到任何对等事件中心。需要至少连接 1 个事件中心才能接收提交事件
- python - Pytransitions 中的嵌套
- sqlite - 在 win IOT 上连接 sqlite 数据库
- java - 使用 Java 将数据写入 Excel 工作表的问题
- scala - 深不可测的 Spring 错误:未扫描服务类
- python - Rename object internal repr, name // tkinter 问题
- apexcharts - ApexChart - 数字非常小的轴
- java - 将 CSV 文件读入 java 对象
- c# - 使用 iPhone/Android 遥控器构建 Windows 应用程序
- java - java中的加密(jasypt)和nodejs中的解密