Как удалить [1] в текстовом выводе из renderPrint в shiny без использования renderText

#r #shiny

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

Вопрос:

У меня есть блестящее приложение, которое печатает aov() результат из файла, введенного пользователем в качестве входных данных. Однако, если существует менее 2 категорий, оно должно вывести предложение, дающее некоторую обратную связь. Это код для этого конкретного вывода:

 output$aovResults <- renderPrint({
    if(is.null(tabForm()))
      return(NULL)
    if(length(input$categoriesAOV) < 2)
      return("You should probably select more categories...")
    summary(aov(Value ~ Treatment, tabForm()[tabForm()$Treatment == input$categoriesAOV,]))
  })
  

(Для минимального воспроизводимого примера вы должны просто создать ui with fluidPage() , добавить verbatimTextOutput("aovResults") и так далее.)

Таблица tabForm() — это просто форматированная реактивная версия введенного файла. Проблема в том, что, хотя он отлично работает без второго if() оператора, это то, что я получаю, когда выбрано меньше 2 категорий (о, кстати, input$categoriesAOV это выбор того, какие категории использовать): введите описание изображения здесь

Мне жаль, что я не могу предоставить полный минимально воспроизводимый пример, но мой полный код имеет длину более 700 строк, и многое из этого предназначено для работы tabForm() . Тем не менее, это наиболее подходящий пользовательский интерфейс:

 tabPanel(title = "One-Way ANOVA",
         h1("One-Way ANOVA"),
         fluidRow(
           column(6,
                  p("This test is to be used when you want to test if 3 or more averages are different."),
                  p(textOutput("shouldDoANOVA")),
                  p("Now let's do your One-Way ANOVA."),
                  checkboxGroupInput("categoriesAOV", label = "You don't have to compare all of them; it can be just a section.", choices = c("Please", "You should enter some data."))
           ),
           column(6,
                  wellPanel(
                    h3("Your results"),
                    verbatimTextOutput("aovResults")
                  )
           )
         )
)
  

(Он находится внутри navbarMenu).

Причина, по которой я продолжаю говорить, что это должно быть renderPrint() , заключается в том, что renderText() не работает в случае, если он действительно печатает aov() результаты:

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

Суть в следующем: как я могу получить вывод "You should probably select more categories..." вместо [1] "You should probably select more categories..." ?

Ответ №1:

В renderPrint , я бы попробовал:

 smmry <- summary(aov(......
cat(capture.output(smmry), sep = "n")
  

Комментарии:

1. На самом деле aov() результат напечатан нормально. Что мне нужно было сделать, так это: if(length(input$categoriesAOV) < 2) return(cat("You should probably select more categories..."))