我目前正在尝试在由4个sliderInputs设置的值的数据帧上使用renderplot(),并且我一直遇到同样的错误。
library(shiny)
# Define server logic for random distribution application
shinyServer(function(input, output) {
sliderValues <- reactive ({
#compose data frame
ws<- as.numeric (c(0:input$sws))
df<-data.frame(
WindSpeed = as.numeric (c(ws)
),
CBH = as.numeric (c(input$sCBH)
),
FFMC = as.numeric (c(input$sFFMC)
),
DC = as.numeric (c(input$sDC)
),
PCFI = as.numeric (c((exp(-66.62+(-0.993*input$sCBH)+(0.568*ws)+(0.671*input$sFFMC)+(0.018*input$sDC)))/(1+(exp(-66.62+(-0.993*input$sCBH)+(0.568*ws)+(0.671*input$sFFMC)+(0.018*input$sDC)))))
)
)
})
#Show the values using an HTML table
output$summary <- renderPlot ({
plot(df$WindSpeed, df$PCFI)
})
output$values <- renderTable({
sliderValues()
})
})
我不确定为什么R会为此踢出错误,但我是Shiny包的新手,我认为它与我创建变量时定义变量有关?我的最终目标似乎不应该是难的......但我一直坚持让代码生成图表很长一段时间。
library(shiny)
shinyUI
(fluidPage(
titlePanel("Wildfire Behaviour Model"),
#Sidebar with sliders that demonstrate various available
#options
sidebarLayout(
sidebarPanel(
#Simple integer interval
sliderInput ("sws", "10m Wind Speed (km/hr):",
min=0,
max=50,
value=15),
sliderInput ("sCBH", "Crown Base Height (m):",
min=0,
max=25,
value=5),
sliderInput ("sFFMC", "Fine Fuel Moisutre Code:",
min = 77,
max=98,
value = 88,
step=1.0),
sliderInput("sDC", "Drought Code:",
min=0,
max= 1000,
value = 200)
),
#Show a table summarizing the values entered
mainPanel(
plotOutput("summary"),
tableOutput("values")
)
)
))
感谢您对该主题的任何帮助,并感谢您抽出宝贵时间来阅读我的问题。凯文
答案 0 :(得分:3)
您的数据框(df
)在reactive
表达式
sliderValues <- reactive ({
#compose data frame
ws<- as.numeric (c(0:input$sws))
df<-data.frame(
WindSpeed = as.numeric (c(ws)
),
CBH = as.numeric (c(input$sCBH)
),
FFMC = as.numeric (c(input$sFFMC)
),
DC = as.numeric (c(input$sDC)
),
PCFI = as.numeric (c((exp(-66.62+(-0.993*input$sCBH)+(0.568*ws)+(0.671*input$sFFMC)+(0.018*input$sDC)))/(1+(exp(-66.62+(-0.993*input$sCBH)+(0.568*ws)+(0.671*input$sFFMC)+(0.018*input$sDC)))))
)
)
这段代码实际上是将sliderValues
设置为您的数据框。但它是反应性的,所以当你改变输入时它会更新。
在被动表达式中,有一个'理解'return
语句,它将最后一个条目返回到sliderValues()
您需要的更改是如何访问绘图功能中的data.frame
#Show the values using an HTML table
output$summary <- renderPlot ({
plot(sliderValues()$WindSpeed, sliderValues()$PCFI)
})
由于sliderValues()
基本上 是您的数据框。
我更喜欢构建反应式数据框的方式更像是
df_sliderValues() <- reactive({
## code to generate my data frame
df <- data.frame(a = c(...),
b = c(...))
return(df)
})
output$plot <- renderPlot({
plot(df_sliderValues()$a, df_sliderValues()$b).
})