r - 根据 ui 输入选择读取 CSV
问题描述
我无法.csv
根据 ui 输入动态读取文件。
我对不同地区的降水和温度数据进行了观察(此处 ID 为zone
)。对于这些相同区域的一个子集,我也有高程观测的频率数据。该应用程序旨在作为具有多个区域的区域的这三个测量值的 CDF 绘图仪。
问题是海拔频率数据的分辨率比降水和温度数据(一起p_t
)要高得多,而且每当用户选择海拔数据()时,我的代码效率太低,无法获得良好的 Shiny 性能elev
。
与其让一个全局可用data.frame
的所有数据可过滤,我希望让 Shiny只为(via ).csv
中选择的区域动态抓取频率高程数据的各个 s 。一旦它们被读入, 所以它们是观察格式,然后将它们与所选的任何降水或温度(观察)数据捆绑在一起,以便使用美学设置为和的便捷功能。input$zone
SelectizeInput
uncount()
data.frame
data()
ggplot
stat_ecdf()
data()$param
data()$zone
这听起来像一个好的方法吗?如果是这样,你能帮帮我吗?总之,主要需要是,如果选择了参数,则让 Shiny 查找并读取文件名与所选区域匹配的elev
那些海拔。.csv
提前感谢您的帮助。
library(tidyverse)
library(shiny)
library(shinydashboard)
# generate sample observation data - precipitation and temperature
# not many megabytes so will just read in all at once at startup as one .csv
zone <- c(rep("abcde", 6), rep("fghij", 6), rep("klmno", 6),
rep("pqrst", 6))
set.seed(1)
val <- rnorm(24, 12, 18)
param <- rep(c("p", "t"), 12)
p_t <- data.frame(zone, val, param, stringsAsFactors = FALSE)
#head(p_t)
# zone val param
#1 abcde 0.7238314 p
#2 abcde 15.3055798 t
#3 abcde -3.0413150 p
#4 abcde 40.7150544 t
#5 abcde 17.9311399 p
#6 abcde -2.7684309 t
# generate sample elevation frequency data with many more observations -
# need to be stored as individual .csvs, too big to read in, uncount, and
# filter by input - too slow
# just want to bind and uncount as they're selected by user
setwd(./elevdata) # separate folder from which to pick out the elev data .csv in the main wd
# and prevent reading in of other app .csv data
val <- c(503, 506, 513, 689)
count <- c(32282, 53172, 45237, 34534)
data.frame(val, count) %>% mutate(zone = "abcde", param = "elev") %>%
write_csv("abcde.csv")
val <- c(-36, -39, -51, -98)
count <- c(52220, 5175, 299237, 100034)
data.frame(val, count) %>% mutate(zone = "fghij", param = "elev") %>%
write_csv("fghij.csv")
val <- c(2, 7, 13, 110)
count <- c(99222, 883172, 114237, 8347633)
data.frame(val, count) %>% mutate(zone = "klmno", param = "elev") %>%
write_csv("klmno.csv")
#only a subset of p_t zones have elev data - variable not currently used
#zoneswithelevdata <- list.files(pattern = "*.csv$")
#zoneswithelevdata <- gsub(".csv", "", zoneswithelevdata)
#shiny app using the above sample data
shinyApp(
ui = fluidPage(
sidebarLayout(sidebarPanel(
selectizeInput(
"zone", "zone", choices = unique(p_t$zone),
selected = c("a"),
multiple = TRUE),
checkboxGroupInput("param", "parameter",
choices = c("elev", "p", "t"), selected =c("elev", "p"))
),
mainPanel(
tabsetPanel(position=c("right"),
tabPanel(strong("static cdf"),
br(),
plotOutput("reg_plot", height = "750px")) )))
),
server = function(input, output) {
# elev_csv_counts_tobind <- reactive({
# if `elev` parameter is checked:
#* read_csv() of the csv(s) with csv file name %in% input$zone **
# * and bind together
#})
data <- reactive({
p_t_e <- p_t %>%
#first subset p_t by the zone(s) and param(s) selected
filter(param %in% input$param,
zone %in% input$zone) %>%
#now attach and uncount the elevation data
bind_rows({elev_csv_counts_tobind %>%
uncount(count)})
})
output$reg_plot <- renderPlot({
ggplot(data(), aes(val, color = param, linetype = zone)) +
labs(y = "proportion of total", x = NULL) +
stat_ecdf(pad = FALSE) + coord_flip()
})
}
)
解决方案
推荐阅读
- java - 用于将 UTC 转换为 EST 的 JUnit 测试用例
- apache-spark - 使用火花写入强制模式
- laravel - 无法通过 composer 安装 JWT
- entity-framework-core - 在 .NET Core 3.x 中使用 Autofac.AspNetCore.Multitenant 时如何在启动时执行数据库迁移?
- sql-server - SQL Server 索引——在复合键字段上创建非聚集索引有什么好处?
- amazon-web-services - 更新 AWS Glue/Athena 上的分区表架构
- javascript - 如何使用 setInterval() 自动更改此 React Spring 项目的幻灯片
- python - 按列名拆分数据框中的多索引数据框
- ios - 我可以在 Xcode 项目中有两个版本的框架吗
- html - 如何在带有管道的html中使用或条件