Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 模块化闪亮应用程序:CSV和图表模块_R_Shiny_Shinymodules - Fatal编程技术网

R 模块化闪亮应用程序:CSV和图表模块

R 模块化闪亮应用程序:CSV和图表模块,r,shiny,shinymodules,R,Shiny,Shinymodules,我想创建一个模块化的闪亮应用程序,其中一个模块,dataUpload,用于导入CSV,另一个模块,chart,用于导入CSV 基于CSV中的列名创建动态x和y下拉列表此操作有效 基于所选输入$xaxis创建绘图,输入$yaxis这会在向量分配中产生错误无效类型/长度(符号/0) 我认为问题在于我在chart.R中的反应性ggplot,我希望得到任何帮助-我在这里添加了所有信息,但我认为这可能是交互模块世界中一个非常好的演示,因此我非常感谢任何帮助 应用程序R 库(闪亮) 图书馆(shinyjs)

我想创建一个模块化的闪亮应用程序,其中一个模块,
dataUpload
,用于导入CSV,另一个模块,
chart
,用于导入CSV

  • 基于CSV中的列名创建动态x和y下拉列表此操作有效
  • 基于所选输入$xaxis创建绘图,输入$yaxis这会在向量分配中产生错误无效类型/长度(符号/0)
  • 我认为问题在于我在chart.R中的反应性ggplot,我希望得到任何帮助-我在这里添加了所有信息,但我认为这可能是交互模块世界中一个非常好的演示,因此我非常感谢任何帮助

    应用程序R
    库(闪亮)
    图书馆(shinyjs)
    图书馆(tidyverse)
    来源(“global.R”)
    
    ui我们需要使用
    会话$ns

    chart <- function(input, output, session, datafile = reactive(NULL)) {
    
      # SINCE DATAFILE IS A REACTIVE WE ADD THE PRERENTHESIS HERE
      # WHERE/HOW CAN I ACCESS input$xaxis?
      # Do I need to use ns? Can you do that in the server side of a module?
      output$XAXIS <- renderUI(selectInput(session$ns("xaxis"), "X Axis", choices = colnames(datafile())))
      output$YAXIS <- renderUI(selectInput(session$ns("yaxis"), "Y Axis", choices = colnames(datafile())))
    
      # NOT WORKING
      # Use the selectInput x and y to plot
      p <- reactive({
        req(datafile)
        # WORKS: ggplot(datafile(), aes(x = Sepal_Length, y = Sepal_Width))
        # DOES NOT WORK:
        ggplot(datafile(), aes_(x = as.name(input$xaxis), y = as.name(input$yaxis))) +
          geom_point()
      })
    
      return(p)
    }
    
    图表
    
    dataUpload <- function(input, output, session, stringsAsFactors) {
      # The selected file, if any
      userFile <- reactive({
        # If no file is selected, don't do anything
        # input$file == ns("file")
        validate(need(input$file, message = FALSE))
        input$file
      })
    
      # The user's data, parsed into a data frame
      dataframe <- reactive({
        read.csv(userFile()$datapath,
                 stringsAsFactors = stringsAsFactors)
      })
    
      # We can run observers in here if we want to
      observe({
        msg <- sprintf("File %s was uploaded", userFile()$name)
        cat(msg, "\n")
      })
    
      # Return the reactive that yields the data frame
      return(dataframe)
    
    }
    
    # The first argument is the id -- the namespace for the module
    dataUploadUI <- function(id, label = "CSV file") {
      # Create a namespace function using the provided id
      #ALL UI FUNCTION BODIES MUST BEGIN WITH THIS
      ns <- NS(id)
      # Rather than fluidPage use a taglist
      # If you're just returning a div you can skip the taglist
      tagList(
      sidebarPanel(
        fileInput(ns("file"), label)),
    
      mainPanel(tableOutput("table"))
      )
    }
    
    chart <- function(input, output, session, datafile = reactive(NULL)) {
    
      # SINCE DATAFILE IS A REACTIVE WE ADD THE PRERENTHESIS HERE
      # WHERE/HOW CAN I ACCESS input$xaxis?
      # Do I need to use ns? Can you do that in the server side of a module?
      output$XAXIS <- renderUI(selectInput("xaxis", "X Axis", choices = colnames(datafile())))
      output$YAXIS <- renderUI(selectInput("yaxis", "Y Axis", choices = colnames(datafile())))
    
      # NOT WORKING
      # Use the selectInput x and y to plot
      p <- reactive({
        req(datafile)
        # WORKS: ggplot(datafile(), aes(x = Sepal_Length, y = Sepal_Width))
        # DOES NOT WORK:
        ggplot(datafile(), aes_(x = as.name(input$xaxis), y = as.name(input$yaxis))) +
          geom_point()
      })
    
      return(p)
    }
    
    chartUI <- function(id, label = "Create Chart") {
    
      ns <- NS(id)
      tagList(
        sidebarPanel(
          uiOutput(ns("XAXIS")),
          uiOutput(ns("YAXIS"))
        ),
        mainPanel(plotOutput("plot"))
      )
    }
    
    chart <- function(input, output, session, datafile = reactive(NULL)) {
    
      # SINCE DATAFILE IS A REACTIVE WE ADD THE PRERENTHESIS HERE
      # WHERE/HOW CAN I ACCESS input$xaxis?
      # Do I need to use ns? Can you do that in the server side of a module?
      output$XAXIS <- renderUI(selectInput(session$ns("xaxis"), "X Axis", choices = colnames(datafile())))
      output$YAXIS <- renderUI(selectInput(session$ns("yaxis"), "Y Axis", choices = colnames(datafile())))
    
      # NOT WORKING
      # Use the selectInput x and y to plot
      p <- reactive({
        req(datafile)
        # WORKS: ggplot(datafile(), aes(x = Sepal_Length, y = Sepal_Width))
        # DOES NOT WORK:
        ggplot(datafile(), aes_(x = as.name(input$xaxis), y = as.name(input$yaxis))) +
          geom_point()
      })
    
      return(p)
    }