如何使用闪亮的应用程序绘制(上载)上传数据集的子集?

时间:2018-10-14 10:00:54

标签: r shiny

我有一个来自here的xls文件。首先,如何降低服务器端代码的复杂性?如何一次获取数据? (猜测是被动的,但如何?)其次,用户将从类别中进行选择,但是如何在plot_ly()中使用*子集*数据?我的代码如下。有人可以帮我检查吗?谢谢。

library(shiny)
library(readxl)
library(plotly)

ui = fluidPage(
  titlePanel("File Input Test"),
  sidebarLayout(
    sidebarPanel(
      fileInput("Xfile", "Choose xls file:",
                accept = c(".xls")
      ),

      uiOutput("here")
    ),
    mainPanel(
      plotlyOutput("plot"))
  )
)

server = function(input, output){

  output$here <- renderUI({

    UserFile <- input$Xfile

    if(is.null(UserFile))
      return(NULL)
    file.rename(UserFile$datapath, paste(UserFile$datapath, ".xls", sep=""))
    test <- read_excel(paste(UserFile$datapath, ".xls", sep=""), 1)

    selectInput(inputId = "xyz", label = "Choose one:", choices = unique(test[[5]]))

  })

  output$plot <- renderPlotly({

    UserFile <- input$Xfile

    if(is.null(UserFile))
      return(NULL)
    file.rename(UserFile$datapath, paste(UserFile$datapath, ".xls", sep=""))
    test <- read_excel(paste(UserFile$datapath, ".xls", sep=""), 1)

    plot_ly(subset(Iris, Iris[[5]] %in% input$xyz), x=~test[[1]], y=~test[[2]])

  })

}

shinyApp(ui,server)

1 个答案:

答案 0 :(得分:0)

关于第一个问题。确实,反应性可以解决问题

+

可以类似地进行绘制。

(对于子集数据,您必须详细说明您的意思。)

以下代码可能会解决您的子集问题       output $ plot <-renderPlotly({         测试<-dat()         if(is.null(test))           返回(NULL)

  dat<-reactive({
    UserFile <- input$Xfile

    if(is.null(UserFile))
      return(NULL)
    file.rename(UserFile$datapath, paste(UserFile$datapath, ".xls", sep=""))
    test <- read_excel(paste(UserFile$datapath, ".xls", sep=""), 1)
  })

  output$here <- renderUI({
    test <- dat()
    if(is.null(test))
      return(NULL)
    selectInput(inputId = "xyz", label = "Choose one:", choices = unique(test[[5]]))

  })