1

.csv ファイルを入力として受け取り、Grade 列に基づいてタブを生成する Shiny アプリを作成しました。

データはこんな感じ

Name    Age Score Grade
Jane    13  89    A
Hanna   14  67    B
Jack    13  80    A
Leena   14  78    B
Amy     12  65    B
Nina    14  90    A
Steven  12  45    C
Omy     13  59    C

コードは、グレードに一致するデータセットの行のみを含むテーブルを各タブに生成します。これらのテーブルは編集可能です。アクティブな tabPanel から編集済みのテーブルをダウンロードしようとしていますが、downloadHandler のコンテンツがどうあるべきかで行き詰まっています。参照用にコードを添付しました。乱雑なコードで申し訳ありません。私は光沢のあるものにかなり慣れていません。

library(shiny)
library(xlsx)
library(rhandsontable)

ui <- fluidPage(  
    titlePanel("Scores"),  
    sidebarLayout(    
        sidebarPanel(      
            fileInput("file", "Upload the file"),      
            br(),     
            downloadButton('downloadData', 'Save as excel')   
        ),    
        mainPanel(uiOutput("op"))  
      )
    )

server <- function(input, output, session) {
    data <- reactive({  
        file1 <- input$file   
        if (is.null(file1)) {
                  return()   
        }
          read.csv(file = file1$datapath) 
    })  

    fun1 <- function(x) {
            mydf <- data()
            DF <- mydf[(mydf$Grade == x), c(1:3)]
            table <- renderRHandsontable({
                  newtable<- rhandsontable(DF, rowHeaders = NULL)
            })
           tabPanel(x, table)
    }

    output$op <- renderUI({
            if (is.null(data()))
                 helpText("File not uploaded!")
            else{
                mydf <- data()
                Tabs <- lapply((unique(mydf$Grade)), fun1)
                do.call(tabsetPanel, c(id = "tabs", Tabs))
        }
    })

    output$downloadData <- downloadHandler(
       filename = function() {
          'Edited table.xls'
       },
        # what should go in place of table
       content = function(file) {
           write.xlsx(table, file)
        }
     )  
   }

shinyApp(ui, server)
4

0 に答える 0