【问题标题】:Using user-selected input as function parameter in shiny?在闪亮中使用用户选择的输入作为函数参数?
【发布时间】:2015-05-29 23:27:45
【问题描述】:

假设我在闪亮的 ui.R 中有一个输入:

selectInput("choice","Select Values",choices=c('a','b','c',FALSE),
            selected="FALSE")

我想将此输入用作 server.R 中函数的参数。此参数的默认值为FALSE,但可以接受字符值。我想设置它,例如,如果用户选择'a',则值'a'将传递给函数中的参数,如果用户选择'FALSE',则默认值@987654326 @ 被传递给参数。

我尝试这样做的方法是:

choice <- ifelse(input$choice=='FALSE',FALSE,input$choice)

然后在函数中使用:

sample_func(param=choice)

但是,这给了我一个错误"param has the wrong format"。错误是choice 不是字符值或FALSE 的结果。

这可能是什么原因?

【问题讨论】:

  • 这对我有用,sample_func 处理输入的方式有问题吗?
  • hm 好吧,我在我的程序中为 selectInput 设置了 multiple = T,如果我删除它似乎可以工作。当我没有选择多个输入时,多个参数对此有何影响?
  • ifelse 对向量很棘手,每次比较都会得到一个值

标签: r parameters shiny


【解决方案1】:

第一个问题是:

choice <- ifelse(input$choice=='FALSE',FALSE,input$choice)

这必须在响应式上下文中编写,因为它取决于用户输入。所以你必须将你的ifelse(...) 部分包装在reactive() 中。当然我不知道你是否已经这样做了,因为你没有发布整个代码,我假设你只是写了没有reactive()包装的代码。

关于同一行的另一件事并不是真正的错误,而是一种习惯。再次使用choice 是个坏主意。关键是,它已经存在于input$choice 中,现在您将其分配给同名的反应值。如果您的代码复杂而冗长,这可能会让人感到困惑。

所以,我会在下面提出类似的建议。 fun_choice <- reactive(ifelse(input$choice=='FALSE',FALSE,input$choice))

下一个问题在:

sample_func(param=fun_choice) ## I changed the argument name to fun_choice

如果您将 fun_choice 视为响应式,则应将其替换为 fun_choice()。此外,这意味着这个函数结果也应该在反应上下文中。所以这行应该变成:

variable_name <- reactive( sample_func(param=fun_choice()) )

当然,如果你想要的是副作用和其他一些东西而不是函数返回,它可以被包裹在observe中。

希望对您有所帮助。

最后一件事,如果fun_choice 在其他地方没有其他用途,只是传递给sample_func,我建议您将它们放在一个reactive() 中。即

variable_name <- reactive({
  fun_choice <- ifelse(input$choice == 'FALSE', FALSE, input$choice)
  sample_func(param = fun_choice)
})

注意,在这个方法中,fun_choice,在同一个reactive()内,不必表示为fun_choice(),而只是fun_choice。

【讨论】:

    猜你喜欢
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2016-04-11
    • 1970-01-01
    • 2019-07-04
    • 2019-06-10
    相关资源
    最近更新 更多