首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >R Shiny :将变量分组到一个唯一的标签下,并在reactive输出中使用该标签

R Shiny :将变量分组到一个唯一的标签下,并在reactive输出中使用该标签
EN

Stack Overflow用户
提问于 2019-06-12 03:07:26
回答 1查看 68关注 0票数 0

我有一个大约有60列的数据框架,我想做一个主成分分析(PCA),但只有一些列。有没有办法将这些列重新组合到一个唯一的标签下,并在响应式输出中调用该标签?

下面是一个可重复使用的示例:

  • 首先:我们在mtcar中创建两个子组(CAT1和CAT2),并创建一个包含列名称的向量(所有这些包都不是必需的)

代码语言:javascript
复制
library(easypackages)
libraries("readxl", "tidyselect", "DT", "shiny", "treemap", "plm", "shinydashboard", "data.table", "formattable", "plotly", "FactoMineR", "factoextra")

CAT1 <- mtcars[, 3:5]
CAT2 <- mtcars[, 5:8]
noms1 <- names(CAT1)
noms2 <- names(CAT2)

然后,我们制作UI,将两个包含名称的向量放在choices中:

代码语言:javascript
复制
ui <- dashboardPage(
  dashboardHeader(title = "test with mtcars", titleWidth = 1000),
  dashboardSidebar(
    selectizeInput("var.acp", "PCA variables", 
                   choices = c("noms1", "noms2"),
                   selected = "noms1", multiple = FALSE),
    selectizeInput("sample", "Sample", choices = unique(rownames(mtcars)), 
                   selected = rownames(mtcars), multiple = TRUE)
  ),
  dashboardBody(
    tabsetPanel(
      tabPanel("test with mtcars",
               box(title = "PCA mtcars",
                   status = "primary",
                   solidHeader = TRUE,
                   collapsible = TRUE,
                   dataTableOutput("pca"),
                   width = 12)
               )
      )
    )
  )

  • 最后,下面是我想要创建的输出代码:

代码语言:javascript
复制
  server <- function(input, output) {

    sample.choice <- reactive({
      out <- input$sample
      out
    })

    acp <- reactive({
      out <- input$var.acp
      out
    })

    user.selection <- reactive({
      data.user <- mtcars[rownames(mtcars) %in% sample.choice(), ]
      data.user <- mtcars[, acp()]
    })

    output$pca <- renderDataTable({
      dpca <- user.selection()
      dpca <- na.omit(dpca)
      tmp <- prcomp(dpca, scale = TRUE)
      tmp <- data.table(get_eig(tmp))
      tmp
    })
  }


shinyApp(ui, server)

输出应该是一个表,其中包含在mtcars的两个子组中的每个子组上实现的主成分分析的特征值。但是,我得到一个错误:undefined columns selected。错误一定是与data.user <- mtcars[, acp()]有关,但这很奇怪,因为当我调用列时,mtcars可以识别它们:

代码语言:javascript
复制
head(mtcars[, noms1])

    # disp  hp drat
    # Mazda RX4          160 110 3.90
    # Mazda RX4 Wag      160 110 3.90
    # Datsun 710         108  93 3.85
    # Hornet 4 Drive     258 110 3.08
    # Hornet Sportabout  360 175 3.15
    # Valiant            225 105 2.76

有没有办法解决这个问题?(如果消息有点长,很抱歉)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-12 03:41:00

根据Stéphane Laurent的回答,这里是如何解决这个问题的:

代码语言:javascript
复制
    acp <- reactive({
      out <- switch(input$var.acp, "noms1"=noms1, "noms2"=noms2)
      out
    })

而不是

代码语言:javascript
复制
    acp <- reactive({
      out <- input$var.acp
      out
    })

server中。

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

https://stackoverflow.com/questions/56550308

复制
相关文章

相似问题

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