用R闪亮改变数据帧

问题描述 投票:2回答:1

我是一般的编码新手,目前为我的应用程序制作R闪亮的应用程序。它的目的是

  1. 上传csv文件
  2. 有多个复选框。如果选中,则数据将通过相应的脚本。
  3. 导出新数据

我看过这个教程,但目前我对反应性有一些困难。我也试过浏览其他问题,但由于我对编码不熟悉,我发现很难从他们的例子中选择我需要的东西。

我目前正在完成导入和导出功能并为正文编写脚本。但是,我不确定如何将这个“主体”整合到服务器端。

这是一个“身体”,写作没有考虑Shiny:

file1 <- file1[ grep("REVERSE", file1[,c(1)], fixed = FALSE, invert = TRUE),]

Ui在某处

...  fileInput('file1'
....  checkboxInput(inputId = "rmDecoy",
                      label = "Remove Decoy Entry",
                      value = TRUE
        ),
....  mainPanel(
        tableOutput('contents')

虽然这是我到目前为止写的服务器端,只有导出功能:

server <- function(input, output) {
  getData <- reactive({
    inFile <- input$file1
    if (is.null(input$file1))
      return(NULL)
    read.csv(inFile$datapath, header=input$header, sep=input$sep, 
             quote=input$quote)
  })

  output$contents <- renderTable(
    getData()
  )

  output$downloadData <- downloadHandler(
    filename = function() { 
      paste("data-", Sys.Date(), ".csv", sep="")
    },
    content = function(file) {
      write.csv(getData(), file)
    })
}

当我做output$rmDecoy时它有点工作但是当我把它与下载数据功能放在一起时,它就不再起作用了。

因此,我的问题是

  1. 我的理解是你不是试图直接改变输入。相反,您正在渲染新表,更改它并导出它。我理解R闪亮的原理吗?
  2. 您如何将上述脚本合并到服务器中?

谢谢您的帮助。

r shiny shiny-server shiny-reactivity
1个回答
1
投票

稍微简化的工作示例如下所示。请注意,我将数据操作步骤file1 <- file1[ grep("REVERSE", file1[,c(1)], fixed = FALSE, invert = TRUE),]替换为前两行。您也可以将此步骤移至getData并仅使用一个reactive,如果您在其他地方的应用程序中永远不需要未处理的数据。

希望这可以帮助!

library(shiny)

ui <- fluidPage(
  fileInput('file1','file1'),
  tableOutput('table_to_show'),
  downloadButton('downloadData', label = "Download")
)          

server <- function(input, output) {
  getData <- reactive({
    inFile <- input$file1
    if (is.null(input$file1))
      return(NULL)
    read.csv(inFile$datapath)
  })

  contents <- reactive({
    dat<- getData()
    print(dat)
    # manipulations to uploaded data here.
    dat <- dat[1:2,]
  })

  output$table_to_show <- renderTable(
  contents()
  )

  output$downloadData <- downloadHandler(
    filename = function() { 
      paste("data-", Sys.Date(), ".csv", sep="")
    },
    content = function(file) {
      write.csv(contents(), file)
    })
}
shinyApp(ui,server)
© www.soinside.com 2019 - 2024. All rights reserved.