#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..."))