【发布时间】: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 <- as.matrix(datasetInput())即可获得datasetInput的当前值。由于datasetInput不是一个列表,我看不出如何循环s以在当前设置中获取“所有可能的值”。但如果没有MWE,就无法确定。 -
谢谢,我试试这个。 s 在脚本的前面定义(s 是光谱列表)。我也试过 x