我正在尝试创建一个闪亮的应用程序,使用户能够在表中添加文本注释。
我创建了一个包含3列的数据框:num
,id
和val
。我希望我的闪亮应用程序执行以下操作:
comment
的新列,将文本注释添加到id等于所选值的行的注释列中。 下面是我闪亮的应用代码。当我从selectinput中选择一个值时,在文本框中添加一些注释,然后单击“添加注释”按钮,我闪亮的应用程序窗口会自动关闭。
有人知道为什么会这样吗?
非常感谢!
library(shiny)
library(DT)
df = data.frame(num=1:10, id=LETTERS[1:10], val=rnorm(10))
ui = fluidPage(
fluidRow(
column(2, selectInput(inputId = 'selectID',
label = 'Select ID2',
choices = LETTERS[1:10],
selected='',
multiple=TRUE)),
column(6, textInput(inputId = 'comment',
label ='Please add comment in the text box:',
value = "", width = NULL,
placeholder = NULL)),
column(2, actionButton(inputId = "button",
label = "Add Comment"))
),
fluidRow (
column(12, DT::dataTableOutput('data') )
)
)
server <- function(input, output, session) {
observeEvent(input$button, {
df[id==input$selectID, 'Comment']=input$comment
})
output$data <- DT::renderDataTable({
DT::datatable(df,
options = list(orderClasses = TRUE,
lengthMenu = c(5, 10, 20), pageLength = 5))
})
}
shinyApp(ui=ui, server=server)
答案 0 :(得分:1)
列id
不被识别为df
中data.frame df[id == input$selectId, "Comment]
的列,将id
替换为df$id
可修复错误。
为了在更新df
之后重新呈现数据表,df
应该是一个反应对象。
要处理selectInput id
中多个选定的selectId
,您可能希望将df$id == input$selectId
替换为df$id %in% input$selectId
此更新的服务器功能应帮助您解决以下问题:
server <- function(input, output, session) {
## make df reactive
df_current <- reactiveVal(df)
observeEvent(input$button, {
req(df_current())
## update df by adding comments
df_new <- df_current()
df_new[df_current()$id %in% input$selectID, "Comment"] <- input$comment
df_current(df_new)
})
output$data <- DT::renderDataTable({
req(df_current())
DT::datatable(df_current(),
options = list(orderClasses = TRUE,
lengthMenu = c(5, 10, 20), pageLength = 5))
})
}