блестящий сюжет не появляется - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь создать свое первое блестящее приложение, в котором будет взято несколько значений, выполнено несколько вычислений (которые зависят как от значений на входе, так и от значений в функции сервера), а затем выходы намечены. Однако я могу либо вообще не отображать график в выходных данных (как в примере ниже), либо просто получить строку 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)

Большое спасибо!

1 Ответ

0 голосов
/ 25 января 2019

Ваша функция 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)
  }

и в вашем пользовательском интерфейсе неправильное имя вывода вашего графика. Это должно быть distplot, а не distPlot.

И вам не нужно вызывать as.data.frame, просто data.frame делает правильную работу, так как вы хотите создать data.frame, а не конвертировать объект.

  data <- reactive({
    data.frame("mini"=as.numeric(input$min), 
               "maxi"=as.numeric(input$max))
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...