저는 디자인 변수 (요인)와 응답 변수 (숫자)의 존재를 기반으로 데이터 세트를 가져와 UI 구성 요소를 생성하는 반짝이는 함수를 작성하고 있습니다.
앱의 모든 변수 ( design
UI 요소) 를 숨기거나 표시하는 확인란 입력 이 있고 디자인 요소 수준에 따라 특정 행을 필터링 할 수도 있습니다. 데이터 세트의 요소 수를 알 수 없으므로 일반적으로 생성해야합니다.
전에 함수 내, ui
그리고 server
정의, 나는 요인의 모든 변수를 찾아에 대한 관련 매개 변수를 생성 checkboxGroupInputs
한 다음에 ui
사용 lapply
하고 do.call
인터페이스에 추가 할 수 있습니다. 그러나 이제 행을 필터링하는 데 사용할 필요가 있으며 그 방법을 잘 모르겠습니다.
설명하기 위해 MWE를 준비했습니다.
data(iris)
iris$Species2 <- iris$Species
filterex <- function(data = NULL){
library(shiny)
# Get design variables (factors) and response variables:
dvars <- names(which(sapply(data, class) == "factor"))
rvars <- names(which(sapply(data, class) != "factor"))
# Generate inputs for all design factor filters:
num_filters <- length(dvars)
filters <- list()
for (i in 1:num_filters){
filt <- dvars[[i]]
filters[[i]] <- list(inputId = filt, label = filt,
choices = levels(data[[filt]]),
selected = levels(data[[filt]]))
}
## UI #############################
ui = fluidPage(
titlePanel("Dynamic filtering example"),
sidebarPanel(
checkboxGroupInput(inputId = "design", label = "Design Variables",
choices = dvars, selected = dvars),
# Add filter checkboxes:
lapply(filters, do.call, what = checkboxGroupInput)),
mainPanel(
dataTableOutput("data"))
)
## SERVER #########################
server = function(input, output, session) {
# SUBSET DESIGN COLUMNS BASED UPON INPUTS:
dat_subset <- reactive({
df <- data[, c(input$design, rvars), drop = FALSE]
# NEED TO INCORPORATE CODE TO SUBSET ROWS HERE
return(df)
})
output$data <- renderDataTable({
dat_subset()
})
}
runApp(list(ui = ui, server = server))
}
filterex(iris)
내 문제는 다음과 같습니다.
setosa
에서 Species
해당 행을 숨기기 위해).어떤 조언이라도 정말 감사하겠습니다! 다른 많은 스레드를 살펴 보았지만 내가 본 모든 솔루션은 특정 데이터 세트에 맞게 조정되었습니다 (따라서 변수의 수와 이름은 선험적으로 알려져 있습니다).
도착한 솔루션과 유사하게 필터 및 동적 부분 집합 을 구축 할 때 lapply
오버 for
루프를 고려하십시오 .
filterex <- function(data = NULL){
# Get design variables (factors) and response variables:
dvars <- names(which(sapply(data, class) == "factor"))
rvars <- names(which(sapply(data, class) != "factor"))
# Generate inputs for all design factor filters:
filters <- lapply(dvars, function(d) {
list(inputId = d, label = d,
choices = levels(data[[d]]),
selected = levels(data[[d]]))
})
## UI #############################
ui = fluidPage(
titlePanel("Dynamic filtering example"),
sidebarPanel(
checkboxGroupInput(inputId = "design", label = "Design Variables",
choices = dvars, selected = dvars),
# Add filter checkboxes:
lapply(filters, do.call, what = checkboxGroupInput)),
mainPanel(
dataTableOutput("data"))
)
## SERVER #########################
server = function(input, output, session) {
# SUBSET DESIGN COLUMNS BASED UPON INPUTS:
dat_subset <- reactive({
df <- data[, c(input$design, rvars), drop = FALSE]
# DF SUBSET LIST
dfs <- lapply(dvars, function(d) {
df[df[[d]] %in% input[[d]],]
})
# ROW BIND ALL DFs
df <- do.call(rbind, dfs)
return(df)
})
output$data <- renderDataTable({
dat_subset()
})
}
runApp(list(ui = ui, server = server))
}
filterex(iris)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다