为什么 `R` 管道运算符 `|>` 在使用 Shiny 的反应式编程中不起作用?

Why does the `R` pipe operator `|>` not work in the reactive programming using Shiny?

我想在 R 的最新版本中使用管道运算符 |>,同时使用 Shiny 进行响应式编程。例如,当我像这样在 server 函数中使用 |> 时:

library(shiny)

ui <- fluidPage(
    textInput("age", "How old are you?"),
    textOutput("message")
)

server <- function(input, output, server) {
    message <- paste0("You are ", input$age) |> reactive({})
    output$message <- renderText(message())
}

shinyApp(ui, server)

我收到这个错误:

Listening on http://127.0.0.1:4346
Warning: Error in : `env` must be an environment
  56: <Anonymous>
Error : `env` must be an environment

当我像这样对服务器功能进行细微更改时,此错误已修复:

server <- function(input, output, server) {
        message <- reactive({paste0("You are ", input$age, " years old")})
        output$message <- renderText(message())
}

但是,我希望能够在我的 Shiny 应用程序中使用管道运算符。我在闪亮的应用程序中使用 |> 的方式有什么问题?

问题是,您将空表达式 {} 传递给 reactive 的第一个参数(x 参数:reactive(x = {}))。

使用上面的代码,管道 |> 将其表达式传递给 reactive 的第二个参数 env,这会导致出现错误。参见 ?reactive

这个有效:

library(shiny)

ui <- fluidPage(
  textInput("age", "How old are you?"),
  textOutput("message")
)

server <- function(input, output, server) {
  message <- paste0("You are ", input$age) |> reactive()
  output$message <- renderText(message())
}

shinyApp(ui, server)