Передача данных из внешней функции на сервер в блестящем приложении - PullRequest
0 голосов
/ 05 апреля 2020

Я хочу отправить мой из функции summ() в функцию сервера. Я выполняю все операции в функции summ() {операции не отображаются} и, наконец, dataframes готово. На сервере я хочу построить два отдельных графика, используя эти кадры с именами df и df1. Может кто-нибудь помочь мне, как отправить эти кадры данных из функции summ в .

 library(shiny)
 library(ggplot2)
 ui<-fluidPage(
sidebarLayout(
sidebarPanel(
  sliderInput(inputId = "Y",label = "Price", value = 2, min =1,max = 6),
  sliderInput(inputId = "d_km",label = "Distance", value = 5, min =1,max = 20),
  sliderInput(inputId = "fact",label = "Multiplication", value = 2, min =1,max = 5),
  actionButton(inputId = "button", label = "Simulate")
),
mainPanel(
  plotOutput("X"),
  plotOutput("HH")


    )

 )
)

  summ<-function(Y,d_km,fact)
{

  ### code   ###
 df <- data.frame("x"=x,"y1"=y1,"y2"=y2)
 df1<- data.frame("obj"=obj_vector)

returns <- list(plot = df, plots=df1)

}
 server<-function(input, output,session){
 default_list <- list(plot = df, plots=df1)

  # daf <- data.frame()
  rv<-reactiveValues(data=default_list)
  rv$data <- reactive(summ (input$Y, input$d_km, input$fact))

  frame <- eventReactive(input$button, {
returned <- rv$data()
cost <- returned$plot
 })

  frame1 <- eventReactive(input$button, {
returned <- rv$data()
coost <- returned$plots
 })


   output$X <- renderPlot({
    ggplot(frame(), aes(x)) +                    # basic graphical object
  geom_line(aes(y=y1), colour="red") +  # first layer
  geom_line(aes(y=y2), colour="green")+
  xlab("Bag_no.")+ylab("Price in USD")+
  geom_text(aes(y=y1,label=y1),size=3,angle=45)
  })

  output$HH <- renderPlot({
   ggplot(frame1(),aes(x=seq(1,runs,1),y=obj_vector))+geom_line(colour="blue")+
    xlab("Simulation_run")+ylab("Objective_value")
   # grid.arrange(p1,p2,ncol=2)
 })
 }
   shinyApp(ui = ui, server = server) 

Ценю вашу помощь.

1 Ответ

0 голосов
/ 05 апреля 2020
  1. В вашем server вы определяете default_list, используя df и df1, которые не определены ни до, ни после в вашей глобальной или локальной среде сервера. Кроме того, вы на самом деле не используете default_list даже после присвоения ему rv с использованием reactiveValues(), поэтому я не вижу цели default_list в вашем приложении. Вы можете заменить его следующим образом, если он все еще нужен в вашей программе:
default_list <- list(plot = c(), plots = c())
На сервере frame и frame1 являются функциями, и предполагается, что они возвращают что-то. Таким образом, вы можете изменить это так:
frame <- eventReactive(input$button, {
  returned <- rv$data()
  cost <- returned$plot
  cost # <= Add This
})

frame1 <- eventReactive(input$button, {
  returned <- rv$data()
  coost <- returned$plots
  coost # <= And This
})
В output$HH визуализации вы используете переменную runs, которая нигде не определена в вашем приложении, вам нужно определить ее заранее, чтобы использовать (возможно, вы определили ее в коде, который вы не показываете, но теперь это вызывает ошибка). Снова в output$HH вы используете y = object_vector, но в summ() вы присваиваете его data.frame('obj' = object_vector), поэтому вам нужно изменить свой код следующим образом:

или в summ():

data.frame('object_vector' = object_vector)

В output$HH:

y = obj
...