在闪亮的应用程序中将数据帧从外部函数传递到服务器

passing dataframe from outside function to server in shiny app

我想将我的 从函数 summ() 发送到服务器函数。我正在 summ() 函数中执行所有操作{operationsi am not showing} 最后 dataframes 准备好了。在服务器中,我想使用名为 dfdf1 的数据框绘制两个单独的图形。 谁能帮我如何将这些数据帧从 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. 在您的 server 中,您使用 dfdf1 定义了 default_list,它们在您的全局或服务器的本地环境之前或之后都没有定义。此外,即使在使用 reactiveValues() 将其分配给 rv 之后,您实际上也没有使用 default_list,因此我在您的应用程序中看不到 default_list 的目标。如果您的程序中仍然需要它,您可以像下面这样替换它:
default_list <- list(plot = c(), plots = c())
  1. 在服务器中 frameframe1 是函数,它们被假定为 return smth。 所以你可以这样改变它:
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
})
  1. output$HH 可视化中,您使用的变量 runs 没有在您的应用程序中的任何地方定义,您需要事先定义它才能使用(也许您已经在您没有定义的代码中定义了它显示,但现在它会导致错误)。
  2. 再次在 output$HH 中使用 y = object_vector,但在 summ() 中将其分配给 data.frame('obj' = object_vector),因此您需要像这样更改代码:

或在summ()中:

data.frame('object_vector' = object_vector)

output$HH 中:

y = obj