我有一个大约有60列的数据框架,我想做一个主成分分析(PCA),但只有一些列。有没有办法将这些列重新组合到一个唯一的标签下,并在响应式输出中调用该标签?
下面是一个可重复使用的示例:
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
中:
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)
)
)
)
)
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
可以识别它们:
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
有没有办法解决这个问题?(如果消息有点长,很抱歉)
发布于 2019-06-12 03:41:00
根据Stéphane Laurent的回答,这里是如何解决这个问题的:
acp <- reactive({
out <- switch(input$var.acp, "noms1"=noms1, "noms2"=noms2)
out
})
而不是
acp <- reactive({
out <- input$var.acp
out
})
在server
中。
https://stackoverflow.com/questions/56550308
复制相似问题