#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()
функцию.