所以,我在Google上呆了几个小时,没有答案。
我想在服务器端创建一个用户定义的函数,该功能采用了我已经知道要包装反应性的输入({input $ feature(},但问题是如何将反应性值同时合并为输入。
我之所以要这样做的原因是,我有一个带有多个标签的navbarpage,可以共享类似同一图的元素。因此,我想要一个用户定义的函数,该函数可以创建所有相似的过滤,而不必用不同的输入和反应性变量名称创建相同的反应性表达式的多个,这些名称占据了2000多个代码。
server <- function(input, output) {
filtered_JointKSA <- reactiveVal(0)
create_filtered_data <- function(df, input_specialtya, filtered_JointKSA) {
if (input_specialtya == 'manual') {
data <- filter(data, SPECIALTY %in% input_specialtyb)
}
if (filtered_JointKSA != 0) {
data <- filter(data, SPECIALTY %in% filtered_JointKSA)
}
reactive({return(data)})
}
filtered_data <- create_filtered_data(df,
reactive({input$specialty1}),
filtered_JointKSA())
observeEvent(
eventExpr = input$clickJointKSA,
handlerExpr = {
A <- filtered_JointKSA(levels(fct_drop(filtered_data()$`Joint KSA Grouping`))[round(input$clickJointKSA$y)])
A
}
)
这给我带来了一个错误:
"匹配中的错误(x,table,nomatch = 0l(: "匹配"需要向量参数"
如果我在哪里尝试创建Filtered_data,但由于找不到filtered_data((,但我的图都没有。
正确的方法是什么?
理想情况下,我希望我的观察事件在用户定义的函数内部也具有不同的方法。
此示例可能会提供一些帮助,但是如果没有工作示例,很难说。更改是在reactive({})
中将调用对您的函数的调用,而不是对该功能的输入,以便输入全部响应用户输入,并且该函数将更新。
library(shiny)
ui <- fluidPage(
numericInput("num", "Number", value = NULL),
verbatimTextOutput("out")
)
server <- function(input, output){
## User-defined function, taking a reactive input
rvals <- function(x){
req(input$num)
if(x > 5){x * 10} else {x*1}
}
# Call to the function, wrapped in a reactive
n <- reactive({ rvals(input$num) })
# Using output of the function, which is reactive and needs to be resolved with '()'
output$out <- renderText({ n() })
}
shinyApp(ui, server)