Ну, вы можете увидеть код для req
, введя его имя без круглых скобок.
function (..., cancelOutput = FALSE)
{
dotloop(function(item) {
if (!isTruthy(item)) {
if (isTRUE(cancelOutput)) {
cancelOutput()
}
else {
reactiveStop(class = "validation")
}
}
}, ...)
if (!missing(..1))
..1
else invisible()
}
В основном происходит то, что он перебирает все передаваемые вами значения и проверяет, выглядят ли они"правда", а не просто проверка на ноль. И если так, это отменит вывод. И оператор if
будет только условно выполнять блок кода, он не обязательно отменит вывод. Например, если у вас есть этот блок
server <- function(input, output) {
output$table <- renderTable({
if(!is.null(input$checkbox))
mtcars %>% select(input$checkbox)
print("ran")
})
}
Код внутри выражения if
выполняется условно, но после print()
всегда выполняется, потому что он не находится в блоке if
. Но с req
server <- function(input, output) {
output$table <- renderTable({
req(input$checkbox)
mtcars %>% select(input$checkbox)
print("ran")
})
}
req()
в основном прерывает оставшуюся часть блока, поэтому print()
не запускается, если req
не является "истинным" значением. Это просто предотвращает запуск ненужного кода.