Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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 带有所有组合的if语句选择IzeInput_R_If Statement_Shiny_Flextable - Fatal编程技术网

R 带有所有组合的if语句选择IzeInput

R 带有所有组合的if语句选择IzeInput,r,if-statement,shiny,flextable,R,If Statement,Shiny,Flextable,我有一个基于数据集中所有变量组合的模型表列表。根据在selectizeInput中选择的变量,我希望在shinny中返回关联的模型表 library(shiny) library(flextable) library(tidyverse) vars <- names(iris)[-1] vars_comb <- unlist(lapply(seq_along(vars), function(n) combn(vars, n, simplify = FALSE)), recursive

我有一个基于数据集中所有变量组合的模型表列表。根据在
selectizeInput
中选择的变量,我希望在
shinny
中返回关联的模型表

library(shiny)
library(flextable)
library(tidyverse)
vars <- names(iris)[-1]
vars_comb <- unlist(lapply(seq_along(vars), function(n) combn(vars, n, simplify = FALSE)), recursive = FALSE)
model_formula <- lapply(vars_comb, function(v) reformulate(v, "Sepal.Length"))
#create models
models <- lapply(model_formula, function(x) glm(x, data = iris))
names(models) <- model_formula
#create list of tables (flextable)
model_coeff_ft <- map(models, function(x) data.frame(x$coefficients) %>% 
                        rownames_to_column("Variables") %>% 
                     flextable() %>% 
                     set_caption("Table 1: Coefficients"))
#return table e.g.
model_coeff_ft[[15]] 


#shiny:
variable_names <- c("Sepal width" = "Sepal.Width", "Petal length" = "Petal.Length", "Petal width" = "Petal.Width", "Species" =  "Species")
ui <- fluidPage(
  titlePanel("Models"),
  sidebarLayout(
    sidebarPanel(
      selectizeInput("variables",
                     label = "Choose variable", choices = variable_names, multiple = TRUE, 
                     options = list(plugins = list('remove_button', 'drag_drop')))
    ),
    mainPanel(
      uiOutput("dataset_flextable")
    )
  )
)
#I NEED TO PUT IF STATEMENT IN HERE:
server <- function(input, output) {
  output$dataset_flextable <- renderUI({
    req(input$variables)
    get(input$variables) %>%
      htmltools_value()
  })
}
shinyApp(ui = ui, server = server)
有什么建议吗

谢谢

这里是第一关:

library(shiny)
library(flextable)
library(tidyverse)


#shiny:
variable_names <- c("Sepal width" = "Sepal.Width", "Petal length" = "Petal.Length", "Petal width" = "Petal.Width", "Species" =  "Species")
ui <- fluidPage(
    titlePanel("Models"),
    sidebarLayout(
        sidebarPanel(
            selectizeInput("variables",
                           label = "Choose variable", choices = variable_names, multiple = TRUE, 
                           options = list(plugins = list('remove_button', 'drag_drop')))
        ),
        mainPanel(
            uiOutput("dataset_flextable")
        )
    )
)
#I NEED TO PUT IF STATEMENT IN HERE:
server <- function(input, output) {
    output$dataset_flextable <- renderUI({
        req(input$variables)
        vars <- input$variables
        vars_comb <- unlist(lapply(seq_along(vars), function(n) combn(vars, n, simplify = FALSE)), recursive = FALSE)
        model_formula <- lapply(vars_comb, function(v) reformulate(v, "Sepal.Length"))
        #create models
        models <- lapply(model_formula, function(x) glm(x, data = iris))
        names(models) <- model_formula
        #create list of tables (flextable)
        model_coeff_ft <- map(models, function(x) data.frame(x$coefficients) %>% 
                                  rownames_to_column("Variables") %>% 
                                  flextable() %>% 
                                  set_caption("Table 1: Coefficients"))
        #return table e.g.
        model_coeff_ft[[length(model_coeff_ft)]] %>% htmltools_value()
        
    })
}
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(flextable)
图书馆(tidyverse)
#闪亮的:

变量名称谢谢,这很有效,但我不想在
shinny
本身中包含模型代码。真正的模型需要很长时间才能运行,因此我将让它们“预运行”并保存在列表中,以便在我打开应用程序时可以快速读取列表。在您的第二次尝试中,我基本上希望删除
服务器代码的第5行到第14行,并读入预先保存的列表,例如保存
saveRDS(model_coeff_ft,“testlist.rds”)
并读入
model_coeff_ft
library(shiny)
library(flextable)
library(tidyverse)


#shiny:
variable_names <- c("Sepal width" = "Sepal.Width", "Petal length" = "Petal.Length", "Petal width" = "Petal.Width", "Species" =  "Species")
ui <- fluidPage(
    titlePanel("Models"),
    sidebarLayout(
        sidebarPanel(
            selectizeInput("variables",
                           label = "Choose variable", choices = variable_names, multiple = TRUE, 
                           options = list(plugins = list('remove_button', 'drag_drop')))
        ),
        mainPanel(
            uiOutput("dataset_flextable")
        )
    )
)
#I NEED TO PUT IF STATEMENT IN HERE:
server <- function(input, output) {
    output$dataset_flextable <- renderUI({
        req(input$variables)
        vars <- input$variables
        vars_comb <- unlist(lapply(seq_along(vars), function(n) combn(vars, n, simplify = FALSE)), recursive = FALSE)
        model_formula <- lapply(vars_comb, function(v) reformulate(v, "Sepal.Length"))
        #create models
        models <- lapply(model_formula, function(x) glm(x, data = iris))
        names(models) <- model_formula
        #create list of tables (flextable)
        model_coeff_ft <- map(models, function(x) data.frame(x$coefficients) %>% 
                                  rownames_to_column("Variables") %>% 
                                  flextable() %>% 
                                  set_caption("Table 1: Coefficients"))
        #return table e.g.
        model_coeff_ft[[length(model_coeff_ft)]] %>% htmltools_value()
        
    })
}
shinyApp(ui = ui, server = server)
library(shiny)
library(flextable)
library(tidyverse)


#shiny:
variable_names <- c("Sepal width" = "Sepal.Width", "Petal length" = "Petal.Length", "Petal width" = "Petal.Width", "Species" =  "Species")
ui <- fluidPage(
    titlePanel("Models"),
    sidebarLayout(
        sidebarPanel(
            selectizeInput("variables",
                           label = "Choose variable", choices = variable_names, multiple = TRUE, 
                           options = list(plugins = list('remove_button', 'drag_drop'))),
            selectInput("model", "Choose model", choices = NULL)
        ),
        mainPanel(
            uiOutput("dataset_flextable")
        )
    )
)
#I NEED TO PUT IF STATEMENT IN HERE:
server <- function(input, output, session) {
    model_coeff_ft <- reactive({
        req(input$variables)
        vars <- input$variables
        vars_comb <- unlist(lapply(seq_along(vars), function(n) combn(vars, n, simplify = FALSE)), recursive = FALSE)
        model_formula <- lapply(vars_comb, function(v) reformulate(v, "Sepal.Length"))
        #create models
        models <- lapply(model_formula, function(x) glm(x, data = iris))
        names(models) <- model_formula
        #create list of tables (flextable)
        model_coeff_ft <- map(models, function(x) data.frame(x$coefficients) %>% 
                                  rownames_to_column("Variables") %>% 
                                  flextable() %>% 
                                  set_caption("Table 1: Coefficients"))
        updateSelectInput(session, "model", choices = names(model_coeff_ft), selected = last(names(model_coeff_ft)))
        return(model_coeff_ft)
    })
    
    
    
    output$dataset_flextable <- renderUI({
        req(model_coeff_ft(), input$model, input$model %in% names(model_coeff_ft()))
        
        #return table e.g.
        model_coeff_ft()[[input$model]] %>% htmltools_value()
        
    })
}
shinyApp(ui = ui, server = server)
library(shiny)
library(flextable)
library(tidyverse)

vars <- names(iris)[-1] %>% sort()
vars_comb <- unlist(lapply(seq_along(vars), function(n) combn(vars, n, simplify = FALSE)), recursive = FALSE)
model_formula <- lapply(vars_comb, function(v) reformulate(v, "Sepal.Length"))
#create models
models <- lapply(model_formula, function(x) glm(x, data = iris))
names(models) <- model_formula
#create list of tables (flextable)
model_coeff_ft <- map(models, function(x) data.frame(x$coefficients) %>% 
                          rownames_to_column("Variables") %>% 
                          flextable() %>% 
                          set_caption("Table 1: Coefficients"))

#shiny:
variable_names <- sort(c("Sepal width" = "Sepal.Width", "Petal length" = "Petal.Length", "Petal width" = "Petal.Width", "Species" =  "Species"))
ui <- fluidPage(
    titlePanel("Models"),
    sidebarLayout(
        sidebarPanel(
            selectizeInput("variables",
                           label = "Choose variable", choices = variable_names, multiple = TRUE, 
                           options = list(plugins = list('remove_button', 'drag_drop'))),
            selectInput("model", "Choose model", choices = NULL)
        ),
        mainPanel(
            uiOutput("dataset_flextable")
        )
    )
)
#I NEED TO PUT IF STATEMENT IN HERE:
server <- function(input, output, session) {
    observeEvent(input$variables, {
        vars <- input$variables %>% sort()
        vars_comb <- unlist(lapply(seq_along(vars), function(n) combn(vars, n, simplify = FALSE)), recursive = FALSE)
        model_formula <- as.character(lapply(vars_comb, function(v) reformulate(v, "Sepal.Length")))
        
        updateSelectInput(session, "model", choices = model_formula, selected = last(model_formula))
    }, ignoreNULL = FALSE, ignoreInit = TRUE)
    
    
    
    output$dataset_flextable <- renderUI({
        req(input$model, input$model %in% names(model_coeff_ft))
        
        #return table e.g.
        model_coeff_ft[[input$model]] %>% htmltools_value()
        
    })
}
shinyApp(ui = ui, server = server)