Пожалуйста, попробуйте в следующий раз добавить воспроизводимый пример с чистым кодом r.
В текущей форме вы не можете использовать условие if после оператора pipe.
Я обычно добавляю условие if в оператор фильтра. Смотрите код ниже. В этом случае вы должны указать условие else, иначе код не будет работать.
Обратите внимание, что я изменил ваш пример, чтобы сделать его воспроизводимым.
library("shiny")
library(DT)
library(dplyr)
library(shinyWidgets)
## Only run examples in interactive R sessions
shinyApp(
# options(shiny.maxRequestSize = 100*1024^2)
ui = fluidPage(
sidebarLayout(
sidebarPanel(
pickerInput("Consequence", "Consequence:",
choices = c( "x", "y","z"),
options = list(`actions-box` = TRUE),
selected = "x",
multiple = TRUE ),
prettyCheckbox(inputId = "CANONICAL",
label = "CANONICAL",
value = FALSE,
outline = TRUE,
fill = TRUE,
bigger = TRUE,
status = 'success',width = NULL)),
mainPanel(
dataTableOutput("contents")
)
)
),
server = function(input, output) {
df <- data.frame(Consequence = c(rep("x",4),rep("y",4),rep("z",4)),
CANONICAL = rep(c("YES","NO"),6),
x1 = c(5,6,7,3,4,5,2,3,4,2,1,7),
x2 = c(1,2,3,2,3,2,1,4,6,7,3,4),
x3 = c(12,43,64,34,93,16,32,74,84,89,45,67)
)
output$contents <- renderDT({
print(input$CANONICAL)
df <- df %>%
filter(Consequence == input$Consequence ) %>%
filter(if (input$CANONICAL == TRUE) CANONICAL == "YES" else !is.na(CANONICAL))
return(df)
})
}
)