使用用户选择的输入作为闪亮的函数参数?

时间:2015-05-29 23:27:46

标签: r parameters shiny

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

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

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

我尝试这样做的方式是:

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

然后在函数中使用它:

sample_func(param=choice)

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

这可能是什么原因?

1 个答案:

答案 0 :(得分: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