Как подавить предупреждения, когда NA вводятся принудительно?

#r #shiny #warnings #suppress-warnings

#r #shiny #warnings #suppress-warnings

Вопрос:

Приведенный ниже блестящий код содержит 2 связанные матрицы; первая отображается на боковой панели как «Сценарий 1», а вторая отображается в модальном диалоговом окне после нажатия кнопки «Одно действие». Вторая матрица отражает Сценарий 1 из первой матрицы и позволяет пользователю как изменять этот Сценарий 1, так и добавлять другие сценарии. 2 Матрицы зеркально отражают друг друга по отношению к Сценарию 1, и последние элементы управления входными данными матрицы.

Чтобы получить матрицу 2, 2 матрицы по существу объединяются с размерами, соответствующими использованию cbind() rbind() функций и, как показано в приведенном ниже коде. Пробелы заполняются НА. Это прекрасно работает.

Однако при вводе любых сценариев, отличных от сценария 1, в матрицу 2 (как показано на рисунке внизу), закрытии диалогового окна матрицы 2 и последующем вызове его нажатием кнопки этого действия консоль rstudio отображает сообщение об ошибке «Предупреждение при принудительном(отмене списка(строка)) : NAs, введенный путем принуждения». Как мне подавить это предупреждение? Приложение работает правильно, и цель состоит в том, чтобы «принудить NAs» войти в объект.

Вы можете увидеть мои неудачные попытки использования suppressWarnings() в приведенном ниже коде.

 library(dplyr) library(ggplot2) library(shiny) library(shinyMatrix)  sumMat lt;- function(x) {return(rep(sum(x, na.rm = TRUE), 10))}  ui lt;- fluidPage(sidebarLayout(  sidebarPanel(  matrixInput(  "matrix1",  label = "Matrix 1:",   value = matrix(c(60,5),ncol=2,dimnames=list(NULL,rep("Scenario 1",2))),   rows = list(extend = TRUE, delete = TRUE),  cols = list(multiheader = TRUE),   class = "numeric"  ),    actionButton(inputId = "showMat2", "Add scenarios"),br(),br(),  ),  mainPanel(plotOutput("plot")) ))  server lt;- function(input, output, session) {    currentMat lt;- reactiveVal(isolate(input$matrix1))    observeEvent(input$matrix1, {  tmpMat1 lt;- input$matrix1  if(any(rownames(input$matrix1)=="")){rownames(tmpMat1)lt;-paste("Row",seq_len(nrow(input$matrix1)))}  updateMatrixInput(session, inputId = "matrix1", value = tmpMat1)    tmpMat2 lt;- currentMat()  suppressWarnings(if(nrow(tmpMat1) gt; nrow(tmpMat2)){tmpMat2 lt;- rbind(tmpMat2, rep(NA, ncol(tmpMat2)))})  suppressWarnings(if(nrow(tmpMat2) gt; nrow(tmpMat1)){tmpMat1 lt;- rbind(tmpMat1, rep(NA, ncol(tmpMat1)))})    suppressWarnings(currentMat(cbind(tmpMat1[drop=FALSE], tmpMat2[,-1:-2,drop=FALSE])))  })    observeEvent(input$showMat2, {  showModal(modalDialog(  matrixInput(  "matrix2",  label = "Matrix 2:",  value = currentMat(),  rows = list(extend = TRUE, delete = TRUE),  cols = list(extend = TRUE,delta = 2,delete = TRUE,multiheader = TRUE),  class = "numeric"  ),  footer = tagList(modalButton("Close"))  ))  })    observeEvent(input$matrix2, {  tmpMat2 lt;- input$matrix2  rownames(tmpMat2) lt;- paste("Row", seq_len(nrow(input$matrix2)))  colnames(tmpMat2) lt;-  paste("Scenario", rep(1:ncol(tmpMat2),each = 2,length.out = ncol(tmpMat2)))  suppressWarnings(currentMat(tmpMat2))  updateMatrixInput(session, inputId = "matrix2", value = tmpMat2)  updateMatrixInput(session, inputId = "matrix1", value = tmpMat2[, 1:2, drop = FALSE])  })    plotData lt;- reactive({  tryCatch(  lapply(seq_len(ncol(currentMat()) / 2),  function(i) {  tibble(  Scenario = colnames(currentMat())[i * 2 - 1],  X = seq_len(10),  Y = sumMat(currentMat()[, (i * 2 - 1):(i * 2), drop = FALSE])  )  }) %gt;% bind_rows(),  error = function(e)  NULL  )  })    output$plot lt;- renderPlot({  plotData() %gt;% ggplot()    geom_line(aes(  x = X,  y = Y,  colour = as.factor(Scenario)  ))    theme(legend.title = element_blank())  }) }  shinyApp(ui, server)  

введите описание изображения здесь