我正在尝试制作我的第一个闪亮的应用程序,其中包含许多值,执行许多计算(取决于输入值和服务器函数中的值),然后输出已绘制。但是,我要么在输出中根本没有绘图(如下面的示例中所示),要么只能得到1:1线,而无法显示我的数据。我不完全确定从哪里开始进行故障排除,但是我认为在进行计算并将其输入到图函数中时遇到问题。如果您有任何指针,将不胜感激。
这是我的应用程序的简化版:
library(shiny)
require(ggplot2)
ui<-fluidPage(
sidebarLayout(
sidebarPanel(
titlePanel("mytitle"),
sliderInput(inputId= "min", label="minratio", value=0, min=0, max=0.499),
sliderInput(inputId= "max", label="maxratio", value=1, min=0.5, max=1)
),
mainPanel(
textOutput("valoutput"),
plotOutput("distPlot",width="100%"))
)
)
server<-function(input, output){
BS = function(x) {
mini=x[1]; maxi=x[2]
ratio <-seq(from=mini,to=maxi, by=0.01)
total<-30*ratio+3
res = c(ratio,total)
}
data<-reactive({as.data.frame("mini"=as.numeric(input$min), "maxi"=as.numeric(input$max))})
output$valoutput <- renderText({BS(data())[1]})
output$distplot <- renderPlot({
d1=BS(data())[1]
d2=BS(data())[2]
ggplot()+geom_abline(intercept = 0, slope=1, colour="grey50")+geom_point(aes(x=d1, y=d2))
}, height = 350, width = 600)
}
shinyApp(ui=ui, server=server)
非常感谢!
答案 0 :(得分:0)
您的BS功能不正确。对此进行更改(使用as.numeric
)。否则,x [1] / x [2]将是data.frames,并将在seq()
中引发错误。另外,您也可以使用双括号,例如x[[1]]
。
BS = function(x) {
mini=x[1]; maxi=x[2]
ratio <-seq(from=as.numeric(mini),to=as.numeric(maxi), by=0.01)
total<-30*ratio+3
res = c(ratio,total)
}
,并且在ui中,绘图输出名称不正确。应该是distplot
而不是distPlot
。
您不需要调用as.data.frame
,只需data.frame
就能完成正确的工作,因为您要创建data.frame而不转换对象。
data <- reactive({
data.frame("mini"=as.numeric(input$min),
"maxi"=as.numeric(input$max))
})