根据data.frame填充字段

时间:2017-07-18 10:09:48

标签: json r shiny

这是我的实际代码:

ui.R

shinyUI(fluidPage(


  titlePanel("Visualition de cube"),

  sidebarLayout(
    sidebarPanel(
      selectInput("choixCube", "Choix du cube :", choices = NULL),
      selectInput("choixDim", "Choix des dimensions", choices = NULL),
      selectInput("choixMes", "Choix des mesures", choices = NULL)
    ),
    mainPanel(
      plotOutput("distPlot")
    )
  )
))

server.R

library(shiny)
library(jsonlite)
library(data.table)
library(dplyr)

json <- fromJSON("./init.json")
cubes <- json$cube %>% setDT()

shinyServer(function(input, output, session) {
  observe({
    updateSelectInput(session, "choixCube",choices = cubes$name)
  })


  test <- reactive({
    if(!is.null(input$choixCube)){
      cubes[name == input$choixCube, dim][[1]]
    }
  })
  observe({
    updateSelectInput(session, "choixDim", choices = test)
  })
})

如您所见,我正在加载一个init JSON文件,其中包含有关我加载的数据的信息。我想用json过滤器的数据框中的“dim”列中的列表填充“choixDim”字段。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

在这种情况下,最好在单独的global.R文件中分离json和库的加载。这里加载的任何内容也可以在ui中找到。请注意,我已将json文件更改为简单的data.frame,创建一个工作示例。

ui.R

shinyUI(fluidPage(


  titlePanel("Visualition de cube"),

  sidebarLayout(
    sidebarPanel(
      selectInput("choixCube", "Choix du cube :", choices = NULL),
      selectInput("choixDim", "Choix des dimensions", choices = json$dim),
      selectInput("choixMes", "Choix des mesures", choices = NULL)
    ),
    mainPanel(
      plotOutput("distPlot")
    )
  )
))

server.R

cubes <- json$cube %>% setDT()

shinyServer(function(input, output, session) {
  observe({
    updateSelectInput(session, "choixCube",choices = cubes$name)
  })

  test <- reactive({
    if(!is.null(input$choixCube)){
      cubes[name == input$choixCube, dim][[1]]
    }
  })


})

global.R

library(shiny)
library(jsonlite)
library(data.table)
library(dplyr)

json <- data.frame(dim= c("dim1","dim2","dim3"))

希望这有帮助!