R 在Shinny中,在给定复选框输入的情况下,如何对绘图的变量(x和或y)进行日志转换?

R 在Shinny中,在给定复选框输入的情况下,如何对绘图的变量(x和或y)进行日志转换?,r,shiny,shiny-server,R,Shiny,Shiny Server,在Shiny中,如何在给定复选框输入的情况下对变量(x和或y)进行日志转换? 如果输入变量是数字的,我希望在给定复选框输入的情况下对变量进行日志转换 library(shiny) library(ggplot2) ui <- fluidPage( selectInput(inputId = "xvariable", label = "X Variable", choices = colna

在Shiny中,如何在给定复选框输入的情况下对变量(x和或y)进行日志转换? 如果输入变量是数字的,我希望在给定复选框输入的情况下对变量进行日志转换

library(shiny)
library(ggplot2)

ui <- fluidPage(
  selectInput(inputId = "xvariable",
              label = "X Variable",
              choices = colnames(mtcars)),
  checkboxInput("LogX", "Log Transform", FALSE),
  selectInput(inputId = "yvariable",
              label = "Y Variable",
              choices = colnames(mtcars)),
  checkboxInput("LogY", "Log Transform", FALSE),
  
  h3(""),
  plotOutput("plot")
)

server <- function(input, output, session) {
  output$plot <- renderPlot({
    req(input$xvariable)
    req(input$yvariable)
    g <- ggplot(mtcars, aes(x = !!as.symbol(input$xvariable), y = !!as.symbol(input$yvariable)))
    if (input$xvariable %in% c("mpg", "disp", "hp", "drat", "wt", "qsec")) {
      # numeric
      g <- g + geom_point()
    } else {
      # categorical
      g <- g + geom_bar()
    }
    g
  })
}

shinyApp(ui, server)
库(闪亮)
图书馆(GG2)

ui这应该行得通。根据选定的变量,创建新的X和Y列。如果启用日志转换,则转换该列。也使ggplot调用更容易一些

library(shiny)
library(ggplot2)

ui <- fluidPage(
  selectInput(inputId = "xvariable",
              label = "X Variable",
              choices = colnames(mtcars)),
  checkboxInput("LogX", "Log Transform", FALSE),
  selectInput(inputId = "yvariable",
              label = "Y Variable",
              choices = colnames(mtcars)),
  checkboxInput("LogY", "Log Transform", FALSE),
  
  h3(""),
  plotOutput("plot")
)

server <- function(input, output, session) {
  output$plot <- renderPlot({
    req(input$xvariable)
    req(input$yvariable)
    
    ## Copy mtcars into new dataframe
    df <- mtcars
    
    ## Create Y Variable
    # If LogY is TRUE
    if(isTRUE(input$LogY)){
      df$y <- log(df[[as.character(input$yvariable)]])
    }
    # If LogY is FALSE
    if(!isTRUE(input$LogY)){
      df$y <- df[[as.character(input$yvariable)]]
    }

    ## Modify X Variable Based on Variable
    if (input$xvariable %in% c("mpg", "disp", "hp", "drat", "wt", "qsec")) {
    ## Create X Variable
      # If LogX is TRUE
    if(isTRUE(input$LogX)){
      df$x <- log(df[[as.character(input$xvariable)]])
    }
      # If LogX is FALSE
    if(!isTRUE(input$LogX)){
      df$x <- df[[as.character(input$xvariable)]]
    }
      
      ## Graph
      g <- ggplot(df, aes(x = x, y = y)) + geom_point()
      
    } else {
      df$x <- as.factor(df[[as.character(input$xvariable)]])
      
      ## Graph
      g <- ggplot(df, aes(x = x)) + geom_bar()
    }

    g
  })
}
库(闪亮)
图书馆(GG2)

ui如果您包含一个简单的示例输入和所需的输出,可以用来测试和验证可能的解决方案,则更容易帮助您。@MrFlick,很抱歉,我添加了一个示例。您已经有条件地添加了不同的geom。为什么不对你的秤做同样的操作呢?如果要进行log10变换,可以选择添加
scale\u x\u log10
scale\u y\u log10