【问题标题】:R Shiny - Operation not allowed without an active reactive contextR Shiny - 没有活跃的反应上下文不允许操作
【发布时间】:2020-06-26 16:56:29
【问题描述】:

这是我第一次创建 应用程序,我收到以下错误消息:

.getReactiveEnvironment()$currentContext() 中的错误: 如果没有活动的反应上下文,则不允许操作。 (你试图做一些只能在反应式表达式或观察者内部完成的事情。)

我怀疑这与使用滑块的值进行计算有关。请协助,并提前致谢!

界面开始

header = dashboardHeader(title = "Fifa player valuation")

sidebar = dashboardSidebar(
  sidebarMenu(
    menuSubItem("Player Valuation - Striker", tabName = "StrikerTab"),
    menuSubItem("Player Valuation - Midfielder", tabName = "MidfielderTab"),
    menuSubItem("Player valuation - Goalkeeper", tabName = "GkTab")
  )
)

ageSlider = sliderInput('age', 'Enter your age in years', min = 0, max = 150, value = 25)

dribblingSlider = sliderInput('dribbling_skills', 'Enter your dribbling skills', min = 0, max = 100, value = 70)

tacklingSlider = sliderInput('tackling_skills', 'Enter your tackling skills', min = 0, max = 100, value = 70)

shootingSlider= sliderInput("shooting_skills", "Enter your shooting skills", min = 0, max = 100, value = 70)

body = dashboardBody(
  tabItems(
    tabItem(tabName = "StrikerTab",ageSlider,dribblingSlider, tacklingSlider, shootingSlider,verbatimTextOutput("strikerValue")),
    tabItem(tabName = "MidfielderTab",ageSlider,dribblingSlider, tacklingSlider),
    tabItem(tabName = "GkTab", ageSlider, gkSlider)
  ),
  verbatimTextOutput("playerValueTxt")
)

ui = dashboardPage(header, sidebar, body, skin = "green")

界面结束

服务器启动

strikerProjectedValue = function(age, dribbling, tackling = 0, shooting = 0){
  return (-250.19*age) + (1987.33*dribbling) + (4439.32*tackling) + (3232.44*shooting)
}

server = function(input, output) {
  predictedStrikerValue = strikerProjectedValue(input$age, 150)
  output$strikerValue = renderPrint(predictedStrikerValue)
}

【问题讨论】:

    标签: shiny r shiny shinydashboard


    【解决方案1】:

    可能有更多的编程,尤其是闪亮的编程,可以给你一个更好的答案。在我看来,您的问题可以使用相当多的澄清,我有点不清楚您想要的确切结果是什么/这段代码背后的理性是什么。尽管如此,我会尝试给出一些答案。也许我提到的一些事情是“个人的”,因为我不会像这样编写闪亮的东西。

    就我个人而言,我不会在 Shiny 中使用函数,而是使用 the reactive({}) statement。我不知道为什么您更喜欢该功能而不是响应式,尤其是当您有很多在任何地方都不使用的滑块时。那么在你的函数中包含所有这些表达式有什么意义呢? 此外,我真的不明白为什么您希望将每个步骤都写入一个单独的向量中。具体来说,我的意思是

    predictedStrikerValue = strikerProjectedValue(input$age, 150)
      output$strikerValue = renderPrint(predictedStrikerValue)
    

    也许您有一些计划在以后使用它们,但从您的描述中又不清楚。为什么不放renderPrint(strikerProjectedValue(input$age, 150))? (这就是为什么我在开头说你的问题可能需要一些额外的解释;),因为这样做可能有一个很好的理由)。

    为了让您的代码正常工作,我将您服务器代码中的所有内容替换为

       output$strikerValue = renderText((-250.19*input$age) + 
                                            (1987.33*input$dribbling_skills) + 
                                            (4439.32*input$tackling_skills) + 
                                            (3232.44*input$shooting_skills))
    

    为了获得与您的功能完全相同的效果,您必须首先将滑块放在 0 上。

    另一种方法,更像你的初始函数:

      predictedStrikerValue<- reactive({(-250.19*input$age) + (1987.33*input$dribbling_skills)
      })
    
       output$strikerValue = renderText(predictedStrikerValue())
    
    

    与上面的代码类似,您可以添加函数的所有其他部分以使其完全反应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-10
      • 2013-09-29
      • 2016-04-17
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      相关资源
      最近更新 更多