使用 selectInput() 选择 select R6 Class 中的数据
Use selectInput() choice to select data in a R6 Class
我想了解如何在 Shiny 应用程序中使用 R6
Class 对象,我想使用 selectInput()
在 R6
对象中呈现数据选择。 select 输入选项包含我的 R6
对象的名称。
我有以下对象:
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'))
在我的 Shiny 应用程序中,我有一个 selectInput()
,可以选择 Manel、Carla、Matilde。我需要的是,当我 select 一个选择时,我会使用 select 在 selectInput() 中编辑的名称呈现对象的值。下面的 Shiny 应用程序:
library(shiny)
ui <- fluidPage(
sidebarPanel(
selectInput('names', 'Names', choices = c('Manel', 'Carla', 'Matilde'))
),
mainPanel(
uiOutput('name'),
uiOutput('age'),
uiOutput('sons')
)
)
server <- function(input, output, session) {
output$name <- renderText(Manel$name)
output$age <- renderText(Manel$age)
output$sons <- renderText(Manel$sons)
}
shinyApp(ui, server)
谢谢!
input$names
永远只会转一个字符值。要从变量的名称中获取变量的值作为字符,您可以使用 get()
函数。在这里,我们可以将其包装在一个响应式对象中,因此我们始终可以访问 "current" 人以获得响应式输出。我们可以做到
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)
}
我想了解如何在 Shiny 应用程序中使用 R6
Class 对象,我想使用 selectInput()
在 R6
对象中呈现数据选择。 select 输入选项包含我的 R6
对象的名称。
我有以下对象:
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'))
在我的 Shiny 应用程序中,我有一个 selectInput()
,可以选择 Manel、Carla、Matilde。我需要的是,当我 select 一个选择时,我会使用 select 在 selectInput() 中编辑的名称呈现对象的值。下面的 Shiny 应用程序:
library(shiny)
ui <- fluidPage(
sidebarPanel(
selectInput('names', 'Names', choices = c('Manel', 'Carla', 'Matilde'))
),
mainPanel(
uiOutput('name'),
uiOutput('age'),
uiOutput('sons')
)
)
server <- function(input, output, session) {
output$name <- renderText(Manel$name)
output$age <- renderText(Manel$age)
output$sons <- renderText(Manel$sons)
}
shinyApp(ui, server)
谢谢!
input$names
永远只会转一个字符值。要从变量的名称中获取变量的值作为字符,您可以使用 get()
函数。在这里,我们可以将其包装在一个响应式对象中,因此我们始终可以访问 "current" 人以获得响应式输出。我们可以做到
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)
}