2

我正在编写一个R文件,它提示用户上传文件并在用户上传的文件中绘制数据。但是,我不知道如何在我的代码中引用这些列(我正在尝试使用 ggplot2)。

用户将上传的数据将是一个 CSV 文件,看起来类似,但可能会有所不同:

        January February March April May
Burgers    4       5       3     5    2

我被困在需要引用列名的 ggplot2 部分。

服务器.R

library(shiny)
library(datasets)
library(ggplot2)

X <- read.csv(file.choose())


# Define server logic required to summarize and view the selected dataset
shinyServer(function(input, output) {


  # Generate a summary of the dataset
  output$summary <- renderPrint({
    dataset <- X
    summary(dataset)
  })

  # Show the first "n" observations
  output$view <- renderTable({
    head(X, n = input$obs)
  })

  # create line plot (I took this from https://gist.github.com/pssguy/4171750)
  output$plot <- reactivePlot(function() {
      print(ggplot(X, aes(x=date,y=count,group=name,colour=name))+
              geom_line()+ylab("")+xlab("") +theme_bw() + 
              theme(legend.position="top",legend.title=element_blank(),legend.text = element_text(colour="blue", size = 14, face = "bold")))

  })
})

用户界面.r

library(shiny)

# Define UI for dataset viewer application
shinyUI(pageWithSidebar(

  # Application title
  headerPanel("Sample Proj"),

  # Sidebar with controls to select a dataset and specify the number
  # of observations to view
  sidebarPanel(
    numericInput("obs", "Number of observations to view:", 10)

  ),

  # Show a summary of the dataset and an HTML table with the requested
  # number of observations
  mainPanel(
    tabsetPanel(
      tabPanel("Table", tableOutput("view")),
      tabPanel("LineGraph", plotOutput("plot"))
    )
  )
))
4

1 回答 1

4

这是一个工作示例。我接受了您的代码并对其进行了修改,以便可以将列号UI.R作为输入传递。(我使用 ggplot2 中的 diamonds 数据集作为我的数据框。)

请注意,我reactive在 Server.R 中创建了几个函数。

服务器.R

library(shiny)
library(datasets)
library(ggplot2)

#x <- read.csv(file.choose())
x <- diamonds

# Define server logic required to summarize and view the selected dataset
shinyServer(function(input, output) {

  createPlot <- function(df, colx, coly) {
    x <- names(df)[colx] 
    y <- names(df)[coly] 
    ggplot(data=df, aes_string(x = x, y = y) ) + geom_line()
  }

  Y <- reactive({
    x
  })

  # Generate a summary of the dataset
  output$summary <- renderPrint({
    dataset <- x
    summary(dataset)
  })

  # Show the first "n" observations
  output$view <- renderTable({
    head(x, n = input$obs)
  })

  # create line plot (I took this from https://gist.github.com/pssguy/4171750)
  output$plot <- reactivePlot(function() {
    df <- Y()
    print(createPlot(df, colx=input$xa, coly=input$ya))
  })
})

用户界面

library(shiny)

# Define UI for dataset viewer application
shinyUI(pageWithSidebar(

  # Application title
  headerPanel("Sample Proj"),

  # Sidebar with controls to select a dataset and specify the number
  # of observations to view
  sidebarPanel(
    numericInput("obs", "Number of observations to view:", 10)
    ,numericInput("xa", "Column to plot as X-axis:", 5)
    ,numericInput("ya", "Column to plot as Y-axis:", 6)

  ),

  # Show a summary of the dataset and an HTML table with the requested
  # number of observations
  mainPanel(
    tabsetPanel(
      tabPanel("Table", tableOutput("view")),
      tabPanel("LineGraph", plotOutput("plot"))
    )
  )
))

作为一个单独的建议,您可以先让闪亮的应用程序使用静态数据框,然后尝试file.choose()使用可变数据框的选项。

希望这可以帮助您继续前进。

根据@joran 的评论更新:

我最初的回应是使用 ggplot 中的列号并添加aes了一个environment=environment()参数。我已经修改了 server.R 中的 createPlot 函数来aes_string代替使用。

于 2013-07-24T00:52:01.480 回答