为啥 `R` 管道运算符 `|>` 在使用 Shiny 的反应式编程中不起作用?
Posted
技术标签:
【中文标题】为啥 `R` 管道运算符 `|>` 在使用 Shiny 的反应式编程中不起作用?【英文标题】:Why does the `R` pipe operator `|>` not work in the reactive programming using Shiny?为什么 `R` 管道运算符 `|>` 在使用 Shiny 的反应式编程中不起作用? 【发布时间】:2021-11-15 18:00:11 【问题描述】:我想在最新版本的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
应用程序中使用管道运算符。我在闪亮的应用程序中使用 |>
的方式有什么问题?
【问题讨论】:
【参考方案1】:问题是,您将空表达式 传递给
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)
【讨论】:
我认为reactive
应该始终与
一起使用。 reactive()
和 reactive()
有什么区别? :)
区别描述在here(见例子)。 返回最后一个表达式的计算结果。在上述情况下NULL
,它被传递给reactive
的x 参数。
你知道我什么时候应该和不应该使用
和reactive()
吗?
Joe Cheng 解释了他使用花括号here 的动机。那里的视频链接已关闭,但您现在可以找到它们here。我想我找不到比他更好的解释了。以上是关于为啥 `R` 管道运算符 `|>` 在使用 Shiny 的反应式编程中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 r 中使用 tidyverse 管道运算符复制相同的表达式?