使用selectInput()选择来选择R6类中的数据

时间:2019-07-03 16:55:58

标签: r shiny r6

我试图了解如何在Shiny应用程序中使用func2类对象,我想使用R6选择在R6对象中呈现数据。选择输入选项包含我的selectInput()对象的名称。

我有以下对象:

R6

在我的Shiny应用程序中,我有一个library(R6) Person <- R6Class("Person", list( name = NULL, age = NA, sons = NA, initialize = function(name, age = NA, sons = NA) { self$name <- name self$age <- age self$sons <- sons } )) Manel <- Person$new("Manel", age = 42, sons = c('Joana', 'Gabriel')) Carla <- Person$new("Maria", age = 44, sons = NA) Matilde <- Person$new("Matilde", age = 52, sons = c('Bruno', 'Joana', 'Maria')) ,可以选择Manel,Carla和Matilde。我需要的是,当我选择一个选项时,将使用在selectInput()中选择的名称来呈现对象的值。下面的“闪亮”应用程序:

selectInput()

谢谢!

1 个答案:

答案 0 :(得分:1)

input$names将始终只转换一个字符值。要从变量的名称中将其作为字符获取值,可以使用get()函数。在这里,我们可以将其包装在一个反应​​对象中,以便我们始终可以访问“当前”人员进行反应输出。我们可以做到

server <- function(input, output, session) {
  person <- reactive(get(input$names))

  output$name <- renderText(person()$name)
  output$age <- renderText(person()$age)
  output$sons <- renderText(person()$sons)
}

或者,将您的人员存储在命名列表中而不是一堆变量中可能更有意义。例如

people <- list(
  Manel = Person$new("Manel", age = 42, sons = c('Joana', 'Gabriel')),
  Carla = Person$new("Carla", age = 44, sons = NA),
  Matilde = Person$new("Matilde", age = 52, sons = c('Bruno', 'Joana', 'Maria'))
)

然后,您可以使用select中的字符值来索引命名列表,而不必使用get()

server <- function(input, output, session) {
  person <- reactive(people[[input$names]])

  output$name <- renderText(person()$name)
  output$age <- renderText(person()$age)
  output$sons <- renderText(person()$sons)
}