【问题标题】:How do I access outputs in Shiny renderUI, and write these to multiple .csv / .zip如何访问 Shiny renderUI 中的输出,并将它们写入多个 .csv / .zip
【发布时间】:2020-11-05 06:45:18
【问题描述】:

我是 Shiny 的新手,如果这很明显并且被问过很多次,我很抱歉,但我已经坚持了好几天了。 我一直在修改仪表板以处理分析化学数据,即它读取多个 csv 文件,使用 Shiny 中的各种滑块和功能处理数据(平滑等),但不保存/下载处理后的数据/输出,我一直在努力做。我似乎无法访问“输出”或处理过的数据,例如作为矩阵列表,然后我将其写为新的 .csv 文件。 (我得到“'closure'类型的对象不是子集”) 我精通 R,并且脚本运行良好,但是对 Shiny 进行这种更改证明是有问题的。如何访问detectedPeaks 或baselineCorrectedSpectra 的输出数据以写入csv(或压缩多个csv 文件)? 谢谢。

#Just part of the relevant code - a long script
#server
 baselineCorrectedSpectra <- reactive({
    if (is.null(input$bc)) {
      method <- "SNIP"
      hws <- 100
    } else {
      method <- input$bc
      hws <- input$bcHws
    }

    return(lapply(smoothedSpectra(), function(y) {
      bl <- estimateBaseline(y, method=method, hws)
      intensity(y) <- intensity(y)-bl[, 2]
      return(y)

    }))
  })


  detectedPeaks <- reactive({
    return(detectPeaks(baselineCorrectedSpectra(), method=input$pdNoise,
                       halfWindowSize=input$pdHws, SNR=input$pdSNR))
  })


datasetInput <- reactive({
                switch(input$dtset,
                       "peaks" = detectedPeaks(),
                       "centroided" = baselineCorrectedSpectra())
        })

         output$DownloadZip <- downloadHandler(
   filename = function(){
     paste0("Results",".zip")
   },
   content = function(con){
     files <- c()
       tmpdir <- tempdir()
       setwd(tempdir())
 
     for (i in 1:length(s)){
    x<-as.matrix(datasetInput[[i]]) #This doesn't work,how do I access this data?
    y<-metaData(s[[i]])
    f<-(paste("processed", y, sep="_" )) 
    if(input$downloadType == ".csv")
    write.csv(x,f)
    else write.table(x,f)
    files<-c(x,files)
        }
     zip(zipfile=con, files=files)
  },
   contentType = "application/zip"
 )

【问题讨论】:

  • s 在哪里定义? datasetInput 是一个响应式,而不是一个列表,所以我认为只需 x &lt;- as.matrix(datasetInput()) 即可获得 datasetInput 的当前值。由于datasetInput 不是一个列表,我看不出如何循环s 以在当前设置中获取“所有可能的值”。但如果没有MWE,就无法确定。
  • 谢谢,我试试这个。 s 在脚本的前面定义(s 是光谱列表)。我也试过 x

标签: r csv shiny zip


【解决方案1】:

我将() 添加到datasetInput 你可以试试这个:

x<-as.matrix(datasetInput([[i]]))

【讨论】:

    【解决方案2】:

    方法如下:

    x<-as.matrix(datasetInput()[[i]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 2018-05-24
      • 2017-10-25
      • 2020-05-01
      • 2017-08-12
      • 1970-01-01
      相关资源
      最近更新 更多