Ошибка в аргументе :: NA / NaN в Shiny R: Сравнение строк - PullRequest
0 голосов
/ 20 февраля 2019

Итак, я пишу приложение, которое позволяет пользователю вводить некоторые основные операции с использованием матрицы.В одной части их просят «вернуть» всю матрицу, как это было бы в базе R, для чего они могут либо «вызвать» матрицу со строками и столбцами [1: 5,1: 5], либо просто вставить вимя матрицы (например, my.matrix).Однако я не могу заставить работать вторую часть, так как приложение аварийно завершит работу и вернет следующую ошибку: Ошибка в аргументе :: NA / NaN.Я включил сегмент кода для этой конкретной части на сервере:

 observeEvent( input$go6, {
  sixthinput<- as.numeric(str_extract_all(input$six, "[0-9]+")[[1]])
  string6 <- str_extract(input$six, "my.matrix")
  sixth.list <- my.matrix[sixthinput[1]:sixthinput[2],sixthinput[3]:sixthinput[4]]

  isolate({
    buttonValue$go1 = FALSE
    buttonValue$go2 = FALSE
    buttonValue$go3 = FALSE
    buttonValue$go4 = FALSE
    buttonValue$go5 = FALSE
    buttonValue$go6 = TRUE
    buttonValue$go7 = FALSE

  })
  comparestring <- "my.matrix"

  if (isTRUE(identical(sixth.list, my.matrix)) & buttonValue$go6) {
    output$display <- renderText({
      paste(c("The matrix you extracted contains:"))
    })
    output$displayMat <- renderTable(
      sixth.list
    )
    output$display2 <- renderText({
      print("Correct!")
    })
  } else if(isTRUE(identical(string6, comparestring)) & buttonValue$go6) {
    output$display <- renderText({
      paste(c("The matrix you extracted contains:"))
    })
    output$displayMat <- renderTable(
      my.matrix
    )

    output$display2 <- renderText({
      print("Correct!")
    })
  } else {  

    output$display <- renderText({
      paste(c("The matrix you extracted contains:"))
    })

    output$displayMat <- renderTable(
      sixth.list
    )

    output$display2 <- renderText({
      print("Incorrect")
    })
  }

})

Я уверен, что это как-то связано с переменной "string6", "comparestring" и / или частью, с которой я сравниваюих в цикле if, но я не уверен, где и как именно все идет не так, за исключением того, что NA.Любые разъяснения приветствуются.

1 Ответ

0 голосов
/ 21 февраля 2019

Проблема в следующих строках:

sixthinput<- as.numeric(str_extract_all(input$six, "[0-9]+")[[1]])
string6 <- str_extract(input$six, "my.matrix")
sixth.list <- my.matrix[sixthinput[1]:sixthinput[2],sixthinput[3]:sixthinput[4]]

Когда пользователь вводит my.matrix без оператора подмножества ([), значение шестого ввода будет numeric(0), потому что нет совпаденийномера.Значение sixthinput[1] будет NA, и вы не сможете затем установить my.matrix на NA.Самый простой способ избежать ошибки - это проверить length(sixthinput) == 4, а если нет, то избежать поднабора my.matrix.

...