>

모두 잘 지내길 바랍니다.서버의 반응적인 부분에 문제가 있습니다 (다른 설명이있는 경우). radioButtons를 사용하여TTSNTTS를 선택하면 각각 mtcars 데이터의 1 : 6 및 7:11 열이 필요합니다. 원하는 출력과 일치하는 그림을 첨부했습니다. 나는 또한 내 코드를 첨부했다. 누군가가 문제가 있는지 알아낼 수 있습니까? 많은 감사합니다 :)

library(shiny)
library(tidyr)
library(dplyr)
library(readr)
library(DT) 
data_table <- mtcars
# Define UI
ui <- fluidPage(
downloadButton('downLoadFilter',"Download the filtered data"),
radioButtons(inputId = "columns", label = "choose variable",
    choices =c("All","TTS", "NTTS"),
    selected = c("All")),
selectInput(inputId = "cyl",
    label = "cyl:",
    choices = c("All",
                unique(as.character(data_table$cyl))),
    selected = "4",
    multiple = TRUE),
selectInput(inputId = "vs",
    label = "vs:",
    choices = c("All",
                unique(as.character(data_table$vs))),
    selected = "1",
    multiple = TRUE),
DT::dataTableOutput('ex1'))
server <- function(input, output) {
thedata <- reactive({
if(input$columns=='All'){
data_table
}
else if  (input$columns== 'TTS'){
data_table<-  data_table[,c(1:6),drop=FALSE]    }
else   
data_table<-  data_table[,c(7:11),drop=FALSE]
if(input$cyl != 'All'){
data_table<-data_table[data_table$cyl %in%   input$cyl,]
}
if(input$vs != 'All'){
data_table<-data_table[data_table$vs %in%  input$vs,]
}
else
data_table })
output$ex1 <- DT::renderDataTable(DT::datatable(filter = 'top',
                                        escape = FALSE, 
                                        options = list(pageLength = 
                                                         10, 
scrollX='500px',autoWidth = TRUE),{
                                                 thedata() # Call reactive 
}))
output$downLoadFilter <- downloadHandler(
filename = function() {
paste('Filtered data-', Sys.Date(), '.csv', sep = '')
},
content = function(path){
write_csv(thedata(),path) # Call reactive thedata() 
})}
shinyApp(ui = ui, server = server)


  • 답변 # 1

    이 문제는 Shiny 또는 Datatable과 거의 관련이 없으며, 데이터를 부분 집합하고 덮어 쓰는 방법에서 비롯됩니다.
    먼저 열을 부분 집합하고 data_table 를 덮어 쓰면 vs 중 하나  또는 cyl  더 이상 존재하지 않으며 누락 된 열을 기준으로 행을 필터링하면 NULL 가 발생합니다. 모든 행이 손실됩니다.

    간단한 수정 : 하위 설정을 재정렬하고 행을 먼저 필터링 한 다음 열을 필터링합니다.

     thedata <- reactive({
        if (!"All" %in% input$cyl) {
          data_table <- data_table[data_table$cyl %in% input$cyl, ]
        }
        if (!"All" %in% input$vs) {
          data_table <- data_table[data_table$vs %in% input$vs, ]
        }
        if (input$columns == "TTS") {
          data_table <- data_table[, c(1:6), drop = FALSE]
        }
        if (input$columns == "NTTS") {
          data_table <- data_table[, c(7:11), drop = FALSE]
        }
        data_table
      })
    
    

관련 자료

  • 이전 php - 워드 프레스 - 404 페이지에 최상위 메뉴가 표시되지 않음
  • 다음 r - igraph 이분 네트워크 투영은 방향을 무시