这是我第一次创建一个闪亮的应用程序,我收到了以下错误消息:
.getReactiveEnvironment(($currentContext((中的错误:没有活动的反应上下文,不允许操作。(你试图做一些只能从反应性表达或观察者内部完成的事情。(
我怀疑这与使用滑块的值进行计算有关。请协助,并提前表示感谢!
UI启动
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")
UI结束
服务器启动
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中使用函数,而是使用reactive({})
语句。我不知道为什么你更喜欢这个函数而不是被动的,尤其是因为你有很多滑块,你在任何地方都不用。那么,在函数中使用所有这些表达式有什么意义呢?此外,我真的不明白为什么你想把每一步都写进一个单独的向量中。具体来说,我指的是的部分
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())
与上面的代码类似,您可以添加函数的所有其他部分,使其完全响应。