假设我在闪亮的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
的结果。
这可能是什么原因?
答案 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
。