如何避免在闪亮的应用程序和助手中重复代码

帖子末尾有有效的闪亮代码

我的代码接受用户输入并生成两个图表。

每个图表在0中都有自己的0部分,该部分将相同的变量保存两次,即

renderPlot

,并使用相同的if语句在 helpers.R 中(即

)调用其他函数

Server

helpers.R中的两个函数反复使用相同的代码。

如何简化编码。 我已经搜索了Shiny样本,但是很多数据来自预包装的库,所以根本看不到。

任何指导都将不胜感激。

app.R

    what_races <- input$race
    what_ages<- c(input$age[1],input$age[2])

helpers.R

if ((length(what_races) > 0 ) & !is.null(what_ages))
wtuuser 回答:如何避免在闪亮的应用程序和助手中重复代码

要走一个路要走。它们对于避免重复代码很有用。使您的代码更短,更易于维护。在创建绘图时,您已经使它们起作用了。

func_check_inputs <- function() {

    what_races <<- input$race
    what_ages  <<- c(input$age[1],input$age[2])

    if (length(what_races) > 0 & !is.null(what_ages))  {return(TRUE)} else {return(FALSE)}

}

稍后您在函数外部使用what_raceswhat_ages时,我们将使用<<-运算符将它们设置为全局变量。

这是您完整应用中的功能:

# Load packages ----
library(shiny)
library(ggplot2)
library(dplyr)
library(scales)
library(treemapify)
library(RColorBrewer)
library(forcats)
library(mosaicData)

# Source helpers ----
source("helpers.R")

# Load data ----
data(Marriage,package="mosaicData")

# User interface ----
ui <- fluidPage(

    fluidRow(
        titlePanel(
            h4("Marriage records from the Mobile County,Alabama,probate court.",style='color:black;padding-left: 15px')
        )
    ),br(),fluidRow(
        column(2,checkboxGroupInput("race","Races to show",c("White","Black","American Indian","Hispanic")),sliderInput("age","Age Range",min = as.integer(min(Marriage$age)),max = as.integer(max(Marriage$age)),value = c(min,max))
        ),column(5,plotOutput("tree"),style='height:100px'
        ),plotOutput("chart"),style='height:100px'
        )
    )

)

server <- function(input,output) {

    #Function to check if inputs are valid
    func_check_inputs <- function() {

        #Make what_races and what_ages global variables
        what_races <<- input$race
        what_ages  <<- c(input$age[1],input$age[2])

        if (length(what_races) > 0 & !is.null(what_ages))  {return(TRUE)} else {return(FALSE)}

    }

    output$tree <- renderPlot({

        if (func_check_inputs() == TRUE) {plot_tree(what_races,what_ages)}

    })

    output$chart <- renderPlot({

        if (func_check_inputs() == TRUE) {plot_tree(what_races,what_ages)}

    })

}

# Run the app
shinyApp(ui,server)
本文链接:https://www.f2er.com/2440771.html

大家都在问