В то время как добавление строк в таблицу работает после нажатия кнопки действия, удаление строк не выполняется в блестящем приложении

#r #shiny #dt

#r #блестящий #dt

Вопрос:

В блестящем приложении ниже я могу добавлять новую строку в таблицу каждый раз, когда нажимаю Add кнопку, но когда я нажимаю относительную кнопку для удаления строк, мое приложение выходит из строя.

 library(shiny) library(shinydashboard) library(shinydashboardPlus) library(DT) library(tibble) Input lt;- structure(list(`Security Type` = c("Stock", "Stock", "Load Fund"), Ticker = c("XOM", "NFLX", "AMCPX"), `Purchase Date` = structure(c(  16070,  17084, 17084 ), class = "Date"), `Sale Date` = structure(c(  18627,  NA, 18545 ), class = "Date"), `Amount Invested` = c(  "$10,000",  "$8,000", "$10,000" )), class = c(  "spec_tbl_df", "tbl_df", "tbl",  "data.frame" ), row.names = c(NA, -3L)) shinyApp(  ui = tags$body(class = "skin-blue sidebar-mini control-sidebar-open", dashboardPage(  options = list(sidebarExpandOnHover = TRUE),  header = dashboardHeader(title = "Investment Advisor Monitoring - Insider Trading", titleWidth = 450),  sidebar = dashboardSidebar(  minified = F, collapsed = F,  selectInput(  "sectype", "Security Type",  c(unique(Input
 #r #shiny #dt

 #r #блестящий #dt

Вопрос:

В блестящем приложении ниже я могу добавлять новую строку в таблицу каждый раз, когда нажимаю Add кнопку, но когда я нажимаю относительную кнопку для удаления строк, мое приложение выходит из строя. Security Type`)) ), selectInput( "sectick", "Ticker", c(unique(Input$Ticker)) ), dateInput("PurDate", "Purchase Date", value = as.Date("2013-12-31")), dateInput("selDate", "Sale Date", value = as.Date("2019-01-31")), selectInput( "aminv", "Amount Invested", c(unique(Input #r #shiny #dt #r #блестящий #dt

Вопрос:

В блестящем приложении ниже я могу добавлять новую строку в таблицу каждый раз, когда нажимаю Add кнопку, но когда я нажимаю относительную кнопку для удаления строк, мое приложение выходит из строя. Amount Invested`)) ), actionButton("add", "Add"), actionButton("deleteRows", "Delete Rows") ), body = dashboardBody( h3("Results"), tabsetPanel( id = "tabs", tabPanel( "InsiderTraining", dataTableOutput("TBL1") ) ) ), controlbar = dashboardControlbar(width = 300), title = "DashboardPage" )), server = function(input, output) { # Init with some example data data lt;- reactiveVal(Input) observeEvent( input$add, { # start with current data data() %gt;% add_row( `Security Type` = isolate(input$sectype), Ticker = isolate(input$sectick), `Purchase Date` = isolate(input$PurDate), `Sale Date` = isolate(input$selDate), `Amount Invested` = isolate(input$aminv) ) %gt;% # update data value data() } ) observeEvent(input$deleteRows,{ if (!is.null(input$TBL1_rows_selected)) { data() lt;- data()[-as.numeric(input$TBL1_rows_selected),] } }) output$TBL1 lt;- renderDataTable( data(),selection="single" ) } )

Ответ №1:

Потому data что объект-это функция. Это то же самое, что пытаться:

 sum() lt;- 2  

И вы получаете то же самое сообщение об ошибке — invalid (NULL) left side of assignment .

Вместо:

 data() lt;- data()[-as.numeric(input$TBL1_rows_selected),]  

Ты хочешь:

 data(data()[-as.numeric(input$TBL1_rows_selected),])  

Вы можете проверить тело функции при использовании reactiveVal , как это:

 library(shiny)  val lt;- reactiveVal()  body(val) #gt; { #gt; if (missing(x)) { #gt; rv$get() #gt; } #gt; else { #gt; force(x) #gt; rv$set(x) #gt; } #gt; }  

И вы можете видеть , что когда вы используете val() , т. е. аргумент отсутствует, вы получаете объект, но если аргумент не отсутствует, вы устанавливаете объект. Вы хотите установить data() , и именно поэтому вам нужно передать новый аргумент (новые данные) в data() функцию.