У меня есть фрейм данных с 60 столбцами, и я хотел бы провести анализ основных компонентов (PCA), но только с некоторыми столбцами.Есть ли способ перегруппировать эти столбцы под уникальной меткой и вызвать эту метку в реактивном выводе?
Вот воспроизводимый пример:
- прежде всего: мы создаем две подгруппыв mtcars (CAT1 и CAT2) и создайте вектор, содержащий имена столбцов (все эти пакеты не нужны)
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)
- , затем мы создаем пользовательский интерфейс, где мыпоместите два вектора, содержащие имена, в
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)
Предполагается, что выводом будет таблица, содержащая собственные значения PCA, реализованные в каждой из двух подгрупп 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
Есть ли способ исправить это?(извините, если сообщение немного длинное)