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