我试图了解如何在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()
谢谢!
答案 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)
}