如何在闪亮的应用程序上以datatable项的形式返回dataframe

如何在闪亮的应用程序上以datatable项的形式返回dataframe,dataframe,shiny,datatables-1.10,Dataframe,Shiny,Datatables 1.10,在下面的代码中,我设法将数据摘要的结果作为打印文本返回,但是我想在datatable中返回它,但我从未得到想要的结果。有人能帮我吗 ui <- fluidPage( fileInput('file1', 'Upload your CSV File'), htmlOutput("variables"), numericInput(inputId="n", label="n", value=4, min=3,step=1), htmlO

在下面的代码中,我设法将数据摘要的结果作为打印文本返回,但是我想在datatable中返回它,但我从未得到想要的结果。有人能帮我吗

    ui <- fluidPage(
      fileInput('file1', 'Upload your  CSV File'),
      htmlOutput("variables"),
      numericInput(inputId="n", label="n", value=4, min=3,step=1),
      htmlOutput("facteurs"),
      verbatimTextOutput("res"),
      DT::dataTableOutput("Tab")
)

server <- function(input, output) {

  myData1 <- reactive({
    inFile <- input$file1
    if (is.null(inFile)) return(NULL)
    data <- read.csv(inFile$datapath, header = TRUE,row.names=1)
    data
  })
  output$variables <- renderUI({
    req(myData1())
    df_init <- myData1() 
    for(i in c(1:ncol(df_init))){
      if((class(df_init[,i])=="integer") && length(unique(df_init[,i]))<=input$n){df_init[,i]<-factor(df_init[,i])}}
    x=sapply(df_init,class)
    x=(x=="numeric")
    df=df_init[,x]
    if (identical(df, '') || identical(df,data.frame())) return(NULL)
    selectInput(inputId = "V1", label = "Variables to use: Y", choices=names(df), selected=names(df[1]))
  })
  output$facteurs <- renderUI({
    req(myData1())
    df_init <- myData1() 
    for(i in c(1:ncol(df_init))){
      if((class(df_init[,i])=="integer") && length(unique(df_init[,i]))<=input$n){df_init[,i]<-factor(df_init[,i])}}
    x=sapply(df_init,class)
    x=(x=="factor")
    df=df_init[,x]
    if (identical(df, '') || identical(df,data.frame())) return(NULL)
    selectInput(inputId = "F1", label = "Factors to use: X", choices=names(df), selected=names(df))


  })
  output$res<-renderPrint({
    data<-myData1()
    if (is.null(data)) return("Enter your data!")
    v=c(input$V1,input$F1)
    x=data[,v]
    print(tapply(x[,1],x[,2],summary)) 
  })
  output$Tab<-renderDataTable({
    data<-myData1()
    if (is.null(data)) return("Enter your data!")
    v=c(input$V1,input$F1)
    x=data[,v]
    DT::datatable(data=tapply(x[,1],x[,2],summary))
  })
  }


shinyApp(ui = ui, server = server)

您不太清楚需要输出的外观,因此这里有一种方法:

output$Tab<-renderDataTable({
    data<-myData1()
    if (is.null(data)) return("Enter your data!")
    v=c(input$V1,input$F1)
    x=data[,v]
    do.call(cbind, tapply(x[,1],x[,2], summary))
  })

或者,如果您想将其转置,请将cbind更改为rbind

非常感谢您,我确实需要它
output$Tab<-renderDataTable({
    data<-myData1()
    if (is.null(data)) return("Enter your data!")
    v=c(input$V1,input$F1)
    x=data[,v]
    do.call(cbind, tapply(x[,1],x[,2], summary))
  })