2015-01-04 13 views
8

Tôi đang thử nghiệm với Shiny và tôi thích nó. Tôi đã xây dựng một ứng dụng nhỏ nơi học sinh tải lên một tệp csv và sau đó chọn một biến phụ thuộc và các biến độc lập và sau đó R tính toán hồi quy tuyến tính. Nó hoạt động tốt. Tôi có nó được tải lên tại địa chỉ:Sáng bóng: Chỉ hiển thị các nút sau khi tệp đã được tải lên

http://carlosq.shinyapps.io/Regresion

[Bạn có thể sử dụng để kiểm tra this file nó nếu bạn muốn. "Bia" là biến phụ thuộc và phần còn lại của các biến ngoại trừ "id" là độc lập]

Dưới đây là server.R:

# server.R 
library(shiny) 

shinyServer(function(input, output) { 

    filedata <- reactive({ 
    infile <- input$file1 
    if (is.null(infile)){ 
     return(NULL)  
    } 
    read.csv(infile$datapath) 
    }) 

    output$dependent <- renderUI({ 
    df <- filedata() 
    if (is.null(df)) return(NULL) 
    items=names(df) 
    names(items)=items 
    selectInput("dependent","Select ONE variable as dependent variable from:",items) 
    }) 


    output$independents <- renderUI({ 
    df <- filedata() 
    if (is.null(df)) return(NULL) 
    items=names(df) 
    names(items)=items 
    selectInput("independents","Select ONE or MANY independent variables from:",items,multiple=TRUE) 
    }) 


    output$contents <- renderPrint({ 
    input$action 
    isolate({ 
     df <- filedata() 
     if (is.null(df)) return(NULL) 
     fmla <- as.formula(paste(input$dependent," ~ ",paste(input$independents,collapse="+"))) 
     summary(lm(fmla,data=df)) 
    }) 
    }) 

}) 

Và đây là ui.R:

# ui.R 
library(shiny) 

shinyUI(fluidPage(
    titlePanel("Multiple Linear Regression"), 
    sidebarLayout(
    sidebarPanel(
     fileInput('file1', 'Choose CSV File', 
       accept=c('text/csv', 
         'text/comma-separated-values,text/plain', 
         '.csv')), 

     tags$hr(), 
     uiOutput("dependent"), 
     uiOutput("independents"), 
     tags$hr(), 
     actionButton("action", "Press after reading file and selecting variables") 

    ), 
    mainPanel(
     verbatimTextOutput('contents') 
    ) 
) 
)) 

Câu hỏi của tôi là: Tôi muốn hiển thị nút "Nhấn sau khi đọc tệp và chọn biến" có điều kiện khi tải lên thành công.

Tôi đã cố gắng sử dụng các gợi ý có ở đây:

Make conditionalPanel depend on files uploaded with fileInput

Nhưng tôi chỉ không thể làm cho nó hoạt động.

Tôi appreaciate bất kỳ trợ giúp.

Trả lời

7

Mã này làm việc cho tôi

ui.R

# ui.R 
library(shiny) 

shinyUI(fluidPage(
    titlePanel("Multiple Linear Regression"), 
    sidebarLayout(
    sidebarPanel(
     fileInput('file1', 'Choose CSV File', 
       accept=c('text/csv', 
         'text/comma-separated-values,text/plain', 
         '.csv')), 

     tags$hr(), 
     uiOutput("dependent"), 
     uiOutput("independents"), 
     tags$hr(), 
     uiOutput('ui.action') # instead of conditionalPanel 
    ), 
    mainPanel(
     verbatimTextOutput('contents') 
    ) 
) 
)) 

server.R

# server.R 
library(shiny) 

shinyServer(function(input, output) { 

    filedata <- reactive({ 
    infile <- input$file1 
    if (is.null(infile)){ 
     return(NULL)  
    } 
    read.csv(infile$datapath) 
    }) 

    output$dependent <- renderUI({ 
    df <- filedata() 
    if (is.null(df)) return(NULL) 
    items=names(df) 
    names(items)=items 
    selectInput("dependent","Select ONE variable as dependent variable from:",items) 
    }) 


    output$independents <- renderUI({ 
    df <- filedata() 
    if (is.null(df)) return(NULL) 
    items=names(df) 
    names(items)=items 
    selectInput("independents","Select ONE or MANY independent variables from:",items,multiple=TRUE) 
    }) 


    output$contents <- renderPrint({ 
    input$action 
    isolate({ 
     df <- filedata() 
     if (is.null(df)) return(NULL) 
     fmla <- as.formula(paste(input$dependent," ~ ",paste(input$independents,collapse="+"))) 
     summary(lm(fmla,data=df)) 
    }) 
    }) 


    output$ui.action <- renderUI({ 
    if (is.null(input$file1)) return() 
    actionButton("action", "Press after reading file and selecting variables") 
    }) 

}) 
+0

Cảm ơn bạn Marat. Tôi đã thử giải pháp của bạn. Nó làm cho nút biến mất ... và điều đó tốt. Nhưng nó không xuất hiện sau khi tải lên tệp. Tôi asumme file server.R của bạn bao gồm một dòng kiểm tra xem các tập tin tải lên thành công. – user23438

+0

@ user23438, tôi không thể nhận được giải pháp bằng cách sử dụng 'conditionPanel', bởi vì tôi không biết cách thiết lập đúng' điều kiện'. Tôi đã chỉnh sửa câu trả lời, bây giờ dựa trên uiOutput. –

+0

Cảm ơn một lần nữa Marat cho thời gian của bạn. Giải pháp mới của bạn đưa tôi đến gần hơn với giải pháp. Bây giờ nút xuất hiện vào đúng thời điểm, nhưng nó tạo ra một vấn đề với nội dung đầu ra $ của tôi. Trước khi tôi có mã trong phần này được bao bọc trong "isolate ({})" được kích hoạt bởi thao tác $ input. Bây giờ đầu vào $ hành động đã biến mất vì nút đã biến mất. Tôi có thể loại bỏ cô lập nhưng sau đó nó in rác cho đến khi các biến thích hợp được chọn. – user23438

9

Dưới đây là các working ShinyApp và phiên bản cuối cùng của cả hai ui.R và server.R dựa trên tất cả các đề xuất được cung cấp bởi Marat.

Đầu tiên ui.R

# ui.R 

library(shiny) 

shinyUI(fluidPage(
    titlePanel("Multiple Linear Regression with R/Shiny"), 
    sidebarLayout(
    sidebarPanel(
     p("Please upload a CSV formatted file with your data."), 
     fileInput('file1', label='Click button below to select the file in your computer.', 
       accept=c('text/csv', 
         'text/comma-separated-values,text/plain', 
         '.csv')), 

     tags$hr(), 
     uiOutput("dependent"), 
     uiOutput("independents"), 
     tags$hr(), 
     uiOutput('ui.action') # instead of conditionalPanel 
    ), 
    mainPanel(
     p("Here's the output from your regression:"), 
     verbatimTextOutput('contents') 
    ) 
) 
)) 

và server.R

# server.R 

library(shiny) 

shinyServer(function(input, output) { 

    filedata <- reactive({ 
    infile <- input$file1 
    if (is.null(infile)){ 
     return(NULL)  
    } 
    read.csv(infile$datapath) 
    }) 

    output$ui.action <- renderUI({ 
    if (is.null(filedata())) return() 
    actionButton("action", "Run regression") 
    }) 

    output$dependent <- renderUI({ 
    df <- filedata() 
    if (is.null(df)) return(NULL) 
    items=names(df) 
    names(items)=items 
    selectInput("dependent","Now select ONE variable as dependent variable from:",items) 
    }) 


    output$independents <- renderUI({ 
    df <- filedata() 
    if (is.null(df)) return(NULL) 
    items=names(df) 
    names(items)=items 
    selectInput("independents","Also select ONE or MANY independent variables in the box below. You can change your selection several times:",items,multiple=TRUE) 
    }) 


    output$contents <- renderPrint({ 
    if (is.null(input$action)) return() 
    if (input$action==0) return() 
    isolate({ 
     df <- filedata() 
     if (is.null(df)) return(NULL) 
     fmla <- as.formula(paste(input$dependent," ~ ",paste(input$independents,collapse="+"))) 
     summary(lm(fmla,data=df)) 
    }) 
    }) 


}) 

Một lần nữa nhờ sự giúp đỡ của bạn Marat.

+0

Bạn được chào đón! –

Các vấn đề liên quan