Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据selectizeInput框减少调用函数的次数_R_Shiny_Plotly - Fatal编程技术网

R 根据selectizeInput框减少调用函数的次数

R 根据selectizeInput框减少调用函数的次数,r,shiny,plotly,R,Shiny,Plotly,我开发了一个闪亮的小应用程序: 该应用程序为selectizeInput中选择的站点绘制降雨。 每次添加或删除站点时,都会将数据发送到外部服务器 目前,它从外部服务器获取所有站点的数据,而不管它们是否保留在列表中。这增加了不需要的时间和计算。 我的问题是如何减少获取现有数据的需要 因为我不能展示真实的应用程序,所以我创建了一个可复制的应用程序来说明我的代码流程: #data id <- as.numeric(1:26) names(id) <- letters #datafram

我开发了一个闪亮的小应用程序:

该应用程序为selectizeInput中选择的站点绘制降雨。 每次添加或删除站点时,都会将数据发送到外部服务器

目前,它从外部服务器获取所有站点的数据,而不管它们是否保留在列表中。这增加了不需要的时间和计算。 我的问题是如何减少获取现有数据的需要

因为我不能展示真实的应用程序,所以我创建了一个可复制的应用程序来说明我的代码流程:

#data
id <- as.numeric(1:26)
names(id) <- letters

#dataframe function
get.rain.data <- function(id){
  print(id)
  vec <- 1:100
  id <- as.numeric(id)
  print(id)
  df <- do.call(rbind,lapply(id,function(i)
    tibble(x=vec,y=vec*i+vec^2*i,
    id=as.factor(rep(i,length(vec))))))
  return(df)
}

#plot function
plot.rain <- function(df){
  print(df)
  p <- ggplot(df,aes(x=x,y=y,group=id))+
    geom_line(aes(color=id),size=0.6)
  ggplotly(p,height=700)
}


#### UI
ui <- fluidPage(
  titlePanel(h1("Rain Intensities and Cumulative Rain")),
  sidebarLayout(
    sidebarPanel(
      helpText("Check rain with info from
               IMS.gov.il"),
      selectizeInput("var", h3("Select station"), 
                     choices = id,
                     multiple = T,
                     selected = 4)
    ),
    mainPanel(
      plotlyOutput("rain")
    )
  )
)


# Define server logic ----
server <- function(input, output) {

  dataInput <- reactive({
    get.rain.data(input$var)
  })

  output$rain <- renderPlotly({
    req(input$var)
    plot.rain(dataInput())
  })
}

# Run the application 
shinyApp(ui = ui, server = server)
#数据

id您拥有所需的代码。只要您想使用input$var的结果,就可以调用DataInput()。通过创建reactivedatainput函数,在更新输入$var时将调用该函数

# Define server logic ----
server <- function(input, output) {

  dataInput <- reactive({
    get.rain.data(input$var)
  })

  output$rain <- renderPlotly({
    plot.rain(dataInput())
  })
}
#定义服务器逻辑----

服务器您拥有所需的代码。只要您想使用input$var的结果,就可以调用DataInput()。通过创建reactivedatainput函数,在更新输入$var时将调用该函数

# Define server logic ----
server <- function(input, output) {

  dataInput <- reactive({
    get.rain.data(input$var)
  })

  output$rain <- renderPlotly({
    plot.rain(dataInput())
  })
}
#定义服务器逻辑----

谢谢你的回答。也许我的问题不清楚:当应用程序加载时,会显示“d”行。如果我添加更多选项,例如“d”、“a”、“b”,该函数不仅会添加“a”和“b”,还会再次运行“d”。是否有减少这种需求的选择?在这种情况下,这不是一个问题,因为功能简单,运行速度快,但在真正的应用程序中不是这样。谢谢你的回答。也许我的问题不清楚:当应用程序加载时,会显示“d”行。如果我添加更多选项,例如“d”、“a”、“b”,该函数不仅会添加“a”和“b”,还会再次运行“d”。是否有减少这种需求的选择?在这种情况下,这不是一个问题,因为函数很简单,运行速度很快,但在真正的应用程序中并非如此。