首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shinyTree:如果选中复选框,则将变量设置为值

shinyTree:如果选中复选框,则将变量设置为值
EN

Stack Overflow用户
提问于 2016-08-29 15:02:57
回答 1查看 2.2K关注 0票数 5

跟进shinyTree:没有选择的视图

代码语言:javascript
复制
library(shiny)
library(shinyTree)
server <- shinyServer(function(input, output, session) {  
  output$tree <- renderTree({ 
    sss=list(  'I lorem impsum'= list( 
      'I.1 lorem impsum'   =  structure(list('I.1.1 lorem impsum'='1', 'I.1.2 lorem impsum'='2'),stopened=TRUE),  
      'I.2 lorem impsum'   =  structure(list('I.2.1 lorem impsum'='3'), stopened=TRUE)))
    attr(sss[[1]],"stopened")=TRUE 
    sss
  })
})
ui <- shinyUI(
  shiny::fluidPage(
    h4('Shiny hierarchical checkbox')
    ,shinyTree("tree", checkbox = TRUE)
  )
)
shinyApp(ui, server)

我想设置一个变量,如果I.1.2。选择lorem,例如,它的值为4

我只知道我必须使用reactive()。正如您可以看到的那样,这里,我已经学会了如何使用checkboxGroupInput,但是我不清楚这是否可以在shinyTree中完成。我在网上找不到这方面的文件。

这是如何做到的呢?

我也看到了函数这里,但不知道如何使用它们。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-29 16:46:27

顺便提一句,我真的很震惊这个包的文档是如此稀少。

函数get_selected()返回一个向量,可以在GitHub代码中看到它。我将使用format = "slices"

考虑以下代码:

代码语言:javascript
复制
library(shiny)
library(shinyTree)
ui <- shinyUI(
  shiny::fluidPage(
    h4('Shiny hierarchical checkbox'),
    shinyTree("tree", checkbox = TRUE),
    # table of weights
    fluidRow(column("",
                    tableOutput("Table"), width = 12,
                    align = "center"))
  )
)
server <- shinyServer(function(input, output, session) {  
  output$tree <- renderTree({ 
    sss=list(  'I lorem impsum'= list( 
      'I.1 lorem impsum'   =  structure(list('I.1.1 lorem impsum'='1', 'I.1.2 lorem impsum'='2'),stopened=TRUE),  
      'I.2 lorem impsum'   =  structure(list('I.2.1 lorem impsum'='3'), stopened=TRUE)))
    attr(sss[[1]],"stopened")=TRUE 
    sss
  })
  output$Table <- renderPrint({

    names(as.data.frame(get_selected(input$tree, format = "slices")))

  })
})
shinyApp(ui, server)

经选择I.1.2。lorem impsum,如下所示:

这是一个长度为1的向量,列名为1。注意点正在被使用而不是空格。

因此,如果我们想在选择变量x时设置一个等于4的变量,我们应该查看I.1.2.lorem.impsum是否在上面的names中,然后执行赋值。

代码语言:javascript
复制
library(shiny)
library(shinyTree)
ui <- shinyUI(
  shiny::fluidPage(
    h4('Shiny hierarchical checkbox'),
    shinyTree("tree", checkbox = TRUE),
    fluidRow(column("",
                    tableOutput("Table"), width = 12,
                    align = "center")),
    fluidRow(column("",
                    tableOutput("Table2"), width = 12,
                    align = "center"))
  )
)
server <- shinyServer(function(input, output, session) {  
  output$tree <- renderTree({ 
    sss=list(  'I lorem impsum'= list( 
      'I.1 lorem impsum'   =  structure(list('I.1.1 lorem impsum'='1', 'I.1.2 lorem impsum'='2'),stopened=TRUE),  
      'I.2 lorem impsum'   =  structure(list('I.2.1 lorem impsum'='3'), stopened=TRUE)))
    attr(sss[[1]],"stopened")=TRUE 
    sss
  })

  x <- reactive({
    if('I.1.2.lorem.impsum' %in% names(
      as.data.frame(
        get_selected(
          input$tree, format = "slices")))){

      x <- 4

    }
  })


  output$Table <- renderPrint({

    names(as.data.frame(get_selected(input$tree, format = "slices")))

  })

  output$Table2 <- renderTable({

    as.data.frame(x())

  })
})
shinyApp(ui, server)

给予

如你所愿。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39209411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档