2014-07-06 5 views
9

저는 R-Shiny를 처음 사용하고 제 질문은 매우 간단 할 수 있습니다. 몇 시간 동안 사고하고 검색 한 후에도 문제를 해결할 수 없었습니다. 문제는 다음과 같습니다.R의 입력 데이터 세트 다루기 Shiny

1) 내 앱에서 사용자에게 데이터 세트를 업로드하도록 요청합니다.

2) 그런 다음 서버 파일에서 데이터 세트를 읽고 일부 분석을 수행 한 결과를 사용자 인터페이스에 다시보고합니다.

3) 내 사용자 인터페이스에는 4 가지 다른 출력이 있습니다.

4) 각 출력의 "렌더링"기능에서 데이터 세트를 읽었습니다. 문제 : 이렇게함으로써 각 기능의 범위에서 데이터가 로컬로 정의되므로 각 출력에 대해 다시 읽어야합니다.

5) 이것은 매우 효율적입니다. 대안이 있습니까? 반응성?

6) 아래는 내 server.R을 쓴 방법을 보여주는 샘플 코드는 다음과 같습니다

shinyServer(function(input, output) { 

    # Interactive UI's: 
    # %Completion 

    output$myPlot1 <- renderPlot({ 
    inFile <- input$file 

     if (is.null(inFile)) return(NULL) 
     data <- read.csv(inFile$datapath, header = TRUE) 

     # I use the data and generate a plot here 

    }) 

    output$myPlot2 <- renderPlot({ 
    inFile <- input$file 

     if (is.null(inFile)) return(NULL) 
     data <- read.csv(inFile$datapath, header = TRUE) 

     # I use the data and generate a plot here 

    }) 

}) 

어떻게 한 번만 입력 데이터를 얻을 내 출력 기능의 데이터를 사용할 수 있습니까? 당신은 reactive 함수에서 파일의 데이터를 호출 할 수 있습니다

답변

7

정말 감사합니다. 그런 다음 다른 reactive 기능에 myData() 예를 들어 액세스 할 수 있습니다 귀하의 답변에 대한

library(shiny) 
write.csv(data.frame(a = 1:10, b = letters[1:10]), 'test.csv') 
runApp(list(ui = fluidPage(
    titlePanel("Uploading Files"), 
    sidebarLayout(
    sidebarPanel(
     fileInput('file1', 'Choose CSV File', 
       accept=c('text/csv', 
         'text/comma-separated-values,text/plain', 
         '.csv')) 
    ), 
    mainPanel(
     tableOutput('contents') 
    ) 
) 
) 
, server = function(input, output, session){ 
    myData <- reactive({ 
    inFile <- input$file1 
    if (is.null(inFile)) return(NULL) 
    data <- read.csv(inFile$datapath, header = TRUE) 
    data 
    }) 
    output$contents <- renderTable({ 
    myData() 
    }) 

} 
) 
) 

enter image description here

+1

안녕 @jdharrison, 정말 고마워. 나는 실제로 그것을 시도했다. 그러나 "유형 '클로저'의 객체는 서브 세트 가능하지 않다"는 오류를 얻는다. – Sam

+0

나중에 렌더링 함수에서 "myData"를 참조하고 $ 연산자를 통해 일부 데이터 열을 사용합니다. myData $ col1과 같은 열을 사용할 때마다 위의 오류가 발생합니다. – Sam

+1

나를 위해 잘 작동합니다. 이 칼럼은'myData() $ col1'으로 접근 할 수 있습니다 만, 일반적으로 먼저 반응 함수에서'mydata <- myData()'와 같은 일을합니다. – jdharrison

관련 문제