我们如何在 Shiny 应用程序中使用“names()”或名称“reactiveVal”的替代方案?

sym*_*ush 5 r names reactive-programming shiny

names()我尝试在闪亮的应用程序内部使用reactiveVal但没有成功。


这可能吗?在闪亮的应用程序中命名反应值的替代方法是什么?


我的第一次尝试抛出一个错误:

names(r()) <- "something"
Run Code Online (Sandbox Code Playgroud)

名称错误(r())<-“某事”:赋值左侧无效(NULL)

我的第二次尝试也是如此:

names(r) <- "something"
Run Code Online (Sandbox Code Playgroud)

名称(r)<-“某物”中的错误:名称()应用于非向量


这是一个最小的示例应用程序:

library(shiny)

ui <- fluidPage(mainPanel(textOutput("text")))

server <- function(input, output) {
  r <- reactiveVal(1)
  # names(r) <- "something"
  output$text <- renderText(
    paste0("The reactiveVal is ", r(),". It's name is ", names(r()),"."))
}

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

Ben*_*etz 2

关键在于如何设置值的文档。来自文档:

Call the function with no arguments to (reactively) read the value; call the function with a single argument to set the value.

这意味着它有点深奥,我个人更喜欢使用 magrittr 别名和管道来保持内容可读。稍后设置无功值名称的关键步骤是:

  • 不带参数调用它r()来读取当前值。
  • 将调用包装起来isolate以防止此步骤发生任何反应
  • 将返回值set_names与名称字符串一起传递。
  • r使用命名值作为参数再次调用反应值以设置r
library(shiny)
library(magrittr)
ui <- fluidPage(mainPanel(textOutput("text")))

server <- function(input, output) {
  r <- reactiveVal(1 %>% set_names("something")) #setting the name on initial

  isolate(r()) %>% 
    set_names("something else") %>%  
    r()
  output$text <- renderText(
    paste0("The reactiveVal is ", r(),". It's name is ", names(r()),"."))
}

shinyApp(ui = ui, server = server)
#> PhantomJS not found. You can install it with webshot::install_phantomjs(). If it is installed, please make sure the phantomjs executable can be found via the PATH variable.
Run Code Online (Sandbox Code Playgroud)

静态 R Markdown 文档不支持闪亮的应用程序

由reprex 包(v0.3.0)于 2019-08-07 创建