【问题标题】:Error in ShinyApp: Could not find functionShinyApp 中的错误:找不到函数
【发布时间】:2019-05-21 19:34:02
【问题描述】:

这是一个 ShinyApp,它根据用户输入输出图形和表格。一旦用户单击“开始”,值就会更新。

我在为每个变量(如 pt_class、arm、freq 等)使用“eventReactive”与在开始时使用“observeEvent”来捕获一次“go”的点击之间犹豫不决。我选择了后者,但我无法理解为什么会发生此错误:

Warning: Error in freq: could not find function "freq"
  72: observeEventHandler [~/ShinyApp/app.R#108]
   1: runApp 

正如您在下面的代码中看到的,我已经定义了“频率”... 提前致歉,因为该应用程序依赖于其他 python 脚本,但如果有必要诊断问题,我很乐意分享它们。

ui <- navbarPage(numericInput(inputId = "vl",
                             "Viral load threshold (copies/mL):", value = 1000, min=50, max=10000000),
                             radioButtons("one_or_duration", "Duration at or above viral load threshold:",
                                          c("A single measurement","Multiple measurements")),
                             radioButtons("pt_class", "Time of treatment:",
                             c("All study participants","Early treated participants","Chronic treated participants")),
                             br(),
                             radioButtons("nnrti", "Include participants on NNRTIs?",
                                          c("No, exclude participants on NNRTIs","Yes, include participants on NNRTIs")),
                             radioButtons("freq", "Expected frequency of post-treatment controllers:",
                                          c("Same frequency as observed by authors","Input expected frequency")),
                             actionButton(inputId="go",label="Go!"),

                             mainPanel(
                             plotOutput(outputId = "graph"), DT::dataTableOutput(outputId="table")))

server <- function(input, output,session) {


  observeEvent(input$go,{

  one_or_duration <- 
              if(input$one_or_duration == "A single measurement"){
              "single"}
              else if(input$one_or_duration == "Multiple measurements"){
              "multiple"}

  nnrti <- 
    if(input$nnrti == "Yes, include participants on NNRTIs"){
      "yes"}
    else if(input$nnrti == "No, exclude participants on NNRTIs"){
      "no"}

  freq <- 
    if(input$freq == "Same frequency as observed by authors"){
      "same"}
    else if(input$freq == "Input expected frequency"){
      "diff"}

  pt_class <- 
    if(input$pt_class == "All study participants"){
      "all"}
    else if(input$pt_class == "Early treated participants"){
      "early"}
    else if(input$pt_class == "Chronic treated participants"){
      "chronic"}

  ptcs_plus_ncs <- 
    if (freq() == "same"){do_this
}


})}

shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shinyapps


    【解决方案1】:

    在当前形式下,我无法运行您的代码,因此无法深入研究问题。

    然而,乍一看,R through 说错误是因为您没有将freq 定义为反应式,但仍将其称为freq(),这导致R 查找名为freq 的函数。这同样适用于一堆其他变量,例如pt_class()one_or_duration()nnrti()arm() 等。

    observeEvent(input$go,{ 的部分有点问题,您似乎不需要 if 子句。而是在 UI 输入值中使用命名向量。例如,而不是

    radioButtons("one_or_duration", "Duration at or above viral load threshold:",
                 c("A single measurement","Multiple measurements"))
    

    radioButtons("one_or_duration", "Duration at or above viral load threshold:",
                 c("A single measurement" = "single",
                   "Multiple measurements" = "multiple"))
    

    然后你就不需要说的部分了

    one_or_duration <- 
                  if(input$one_or_duration == "A single measurement"){
                  "single"}
                  else if(input$one_or_duration == "Multiple measurements"){
                  "multiple"}
    

    然后,不要使用one_or_duration()(它不是反应式,不能通过添加括号来调用),而是使用 input$one_or_duration。顺便说一句,您不需要使输入变量反应,因为它们已经是。

    这绝对不能解决您的所有代码问题,但它可能是一个开始。

    【讨论】:

    • 哇,这已经帮助了这么多地狱行者。它清理了我的大部分代码。我现在正在经历并做出改变。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 2018-07-31
    • 2016-05-20
    • 2015-09-06
    相关资源
    最近更新 更多