2017-12-30 72 views
1

내 Shiny 응용 프로그램에서 만든 동적 data.frame을 관리하는 데 문제가 있습니다. 문제는 server.R을 통해 처리되기 때문에 액세스 할 수있는 방법을 찾지 못하고 벡터로 병합 한 다음 다른 모든 변수 (모든 텍스트/숫자 입력)를 작성한 다음 작성합니다.Shiny 응용 프로그램에서 .csv의 병합 data.frame을 작성하십시오.

근무 응용 프로그램은 여기에 액세스 할 수 있습니다 https://samtre.shinyapps.io/fichier_test/

data.frame가 생성된다 -에 숫자보다 더 큰 일을 선택할 때 "5 Entrez의 르 세부 드 chaque 항목", "4 -의 facturer à 항목".

: 상기에서 data.frame를 생성 server.R의 코드

여기
output$item_des <- renderUI({ 
    numIndividuals <- as.integer(input$numIndividuals) 
    lapply(1:numIndividuals, function(i) { 
     textInput(inputId = paste0("item_des", i), label = paste("Description", i)) 
    }) 
    }) 
    output$item_qua <- renderUI({ 
    numIndividuals <- as.integer(input$numIndividuals) 
    lapply(1:numIndividuals, function(i) { 
     numericInput(inputId = paste0("item_qua", i), label = paste("Quantité", i), value = 1, min = 1) 
    }) 
    }) 
    output$item_pri <- renderUI({ 
    numIndividuals <- as.integer(input$numIndividuals) 
    lapply(1:numIndividuals, function(i) { 
     textInput(inputId = paste0("item_pri", i), label = paste("Prix", i)) 
    }) 
    }) 

이다 : 여기

는 입력 동적 번호를 생성 처리 server.R의 코드

formData <- reactive({ 
    data <- sapply(fieldsAll, function(x) input[[x]]) 
    data <- t(data) 
    data 
    }) 
    saveData <- function(data) { 
    fileName <- sprintf("%s.csv", 
         input$res_fac) 
    write.csv(x = data, file = file.path(responsesDir, fileName), 
       row.names = FALSE, quote = TRUE) 
    } 

"fieldsAll"다음 .CSV를 기록

output$item_tous <- renderTable({ 
    num <- as.integer(input$numIndividuals) 

    data.frame(cbind(
    lapply(1:num, function(i) { 
     input[[paste0("item_des", i)]] 
    }), 
    lapply(1:num, function(i) { 
     input[[paste0("item_qua", i)]] 
    }), 
    lapply(1:num, function(i) { 
     input[[paste0("item_pri", i)]] 
    })   
)) 
    }, colnames = FALSE, bordered = TRUE, digits = 0) 

그리고 server.R의 마지막 코드 쓰여질 모든 입력 목록입니다. 나는 오랫동안이 문제에 부착 된

fieldsAll <- c("per_nom", "per_tel", "per_dep", "fac_nom", "fac_adr", "res_dat", 
       "res_heu", "res_jou", "res_qua", "res_loc", "res_fac", "numIndividuals") 

: 내가하고 싶은 것과 내 펼치기 data.frame를 작성 후입니다. data.frame를 만들기위한 원래의 코드는 여기에서 찾을 수 있지만 (Christopherlovell의 대답) https://www.r-bloggers.com/mimicking-a-google-form-with-a-shiny-app/

: Create dynamic number of input elements with R/Shiny

감사 구글 양식을 해내 원본 코드에서입니다!

답변

0

안녕하세요 귀하의 문제는 render 상태로 data.frame을 만드는 것입니다. 이제 CSV에 액세스 할 수 없습니다. 당신이 원하는 것은이

item_tous_table <- reactive({ 
    num <- as.integer(input$numIndividuals) 

    data.frame(cbind(
    lapply(1:num, function(i) { 
     input[[paste0("item_des", i)]] 
    }), 
    lapply(1:num, function(i) { 
     input[[paste0("item_qua", i)]] 
    }), 
    lapply(1:num, function(i) { 
     input[[paste0("item_pri", i)]] 
    })   
)) 
}) 

같은 반응 한 Statment 뭔가에 data.frame의 건설 위치하게 한 후, 나는 불안 해요이

output$item_tous <- renderTable({ 
    item_tous_table() 
}, colnames = FALSE, bordered = TRUE, digits = 0) 

처럼 뭔가에 렌더링 한 Statment을 변경하는 것입니다 무엇을 난 당신이 더 나은이

같은 observeEvent 뭔가에 CSV의 구원을 배치 생각하고 saveData에하고 싶은하지만 당신은 또한 item_tous_table()

와 함께뿐만 아니라 거기 data.frame에 액세스 할 수 있습니다

observeEvent({ 
    input$submit 
},{ 
    fileName <- sprintf("%s.csv", 
         input$res_fac) 
    write.csv(x = formData() , file = file.path(responsesDir, fileName), 
      row.names = FALSE, quote = TRUE) 
}) 

이 기능은 아닙니다.

희망이 도움이됩니다!

+0

안녕 Bertil, 모든 것이 잘 작동했습니다! 감사. –