[英]R shiny - perform seperate operations on loaded data with action buttons
我是 R Shiny 的新手,我正在尝试开发一个上传文件并合并数据的应用程序。 到目前为止,这是我的代码:
library(shiny)
library(DT)
library(leaflet)
library(tidyverse)
library(reshape2)
ui <- fluidPage(
fileInput('SNP_raw_data', 'Choose SNP_raw_data to upload', accept = c('.csv')),
fileInput('GPS_raw_data', 'Choose GPS_raw_data to upload', accept = c('.csv')),
actionButton('long2wide_table_button', 'Show conversion long2wide as table'),
actionButton('samples_map_button', 'Show map of listed samples'),
DT::dataTableOutput("long2wide_table"),
uiOutput("samples_map")
)
server <- function(input, output) {
df_SNP_upload <- reactive({
inFile_SNP <- input$SNP_raw_data
if (is.null(inFile_SNP))
return(NULL)
df_SNP <- read.csv(inFile_SNP$datapath, header = TRUE,sep = input$separator)
return(df_SNP)
})
df_GPS_upload <- reactive({
inFile_GPS <- input$GPS_raw_data
if (is.null(inFile_GPS))
return(NULL)
df_GPS <- read.csv(inFile_GPS$datapath, header = TRUE,sep = input$separator)
return(df_GPS)
})
conversion_long2wide <- eventReactive(input$long2wide_table_button, {
data_arranged <- df_SNP_upload() %>%
select(ID, Assay, Name, Converted) %>%
arrange(Assay)
data_mutated <- data_arranged %>%
mutate(data_arranged, Converted = gsub(":", "", data_arranged$Converted))
NameID <- paste(data_arranged$Name, data_arranged$ID)
Name_ID_long <- gsub(" ", "_", NameID)
Name_ID <- gsub("....$", "", Name_ID_long)
data_combined <- data_mutated[,c(2,4)] %>%
add_column(Name_ID, .after=1)
convA <- mutate(data_combined, Converted = gsub("A", "01", data_combined$Converted))
convC <- mutate(convA, Converted = gsub("C", "02", convA$Converted))
convG <- mutate(convC, Converted = gsub("G", "03", convC$Converted))
convT <- mutate(convG, Converted = gsub("T", "04", convG$Converted))
data_na <- mutate(convT, Converted = gsub("No 02all", "0000", convT$Converted))
order0201 <- mutate(data_na, Converted = gsub("0201", "0102", data_na$Converted))
order0301 <- mutate(order0201, Converted = gsub("0301", "0103", order0201$Converted))
order0302 <- mutate(order0301, Converted = gsub("0302", "0203", order0301$Converted))
order0401 <- mutate(order0302, Converted = gsub("0401", "0104", order0302$Converted))
order0402 <- mutate(order0401, Converted = gsub("0402", "0204", order0401$Converted))
order0403 <- mutate(order0402, Converted = gsub("0403", "0304", order0402$Converted))
data_converted <- dcast(order0403, formula = Name_ID ~ Assay, value.var = "Converted")
NameNameID <- data_mutated %>%
add_column(Name_ID, .after=3) %>%
select(Name, Name_ID) %>%
unique() %>%
rename(Sample_ID = Name) %>%
arrange(Name_ID)
Sample_ID <- NameNameID$Sample_ID
data_converted2 <- data_converted %>%
add_column(Sample_ID, .after = 1)
coords_selected <- df_GPS_upload() %>%
mutate(coordinates, Sample_ID = gsub(" ", "", coordinates$Sample_ID)) %>%
select(Sample_ID, Population, Latitude, Longitude)
data_joined <- left_join(data_converted2, coords_selected, by = "Sample_ID") %>%
relocate(Population, .after = Name_ID) %>%
relocate(Latitude, .after = Population) %>%
relocate(Longitude, .after = Latitude)
SNPs_Coords <- select(data_joined, -5)
return(SNPs_Coords)
})
output$long2wide_table <- DT::renderDataTable({
conversion_long2wide()
})
output$samples_map_button <- renderUI({
})
}
shinyApp(ui = ui, server = server)
文件输入运行良好。 但是,之后我想通过使用操作按钮对数据执行一些操作,例如“long2wide_table_button”。 这在某种程度上不起作用,也许我不确定如何正确连接这些功能。 Conversion_long2wide() 将成为集成的中心枢纽,我认为就像其他应用程序中的 data() 一样。 它应该提供一个数据框,我想通过按下操作按钮在该数据框上执行进一步的操作,例如映射或统计。 convert_long2wide 作为一个单独的脚本运行良好,但是当集成到应用程序中时会导致错误警告,例如“列 ID 不存在”或“函数 select() 未找到”,即使它们在那里。 这是要上传的 SNP 数据示例:
ID Assay Name Converted
1 S06-A01 LL_A1_01275_308 R289 A:G
2 S95-A01 LL_A1_01275_308 R419 A:G
3 S05-A01 LL_A1_01275_308 P573 A:G
4 S94-A01 LL_A1_01275_308 R345 A:A
5 S04-A01 LL_A1_01275_308 P098 A:G
6 S93-A01 LL_A1_01275_308 R337 G:G
7 S03-A01 LL_A1_01275_308 N0509 G:G
8 S92-A01 LL_A1_01275_308 R328 A:G
9 S02-A01 LL_A1_01275_308 N0494 A:G
10 S91-A01 LL_A1_01275_308 R320 G:G
...和 GPS 数据:
Sample_ID Population Latitude Longitude
234 P573 Poland_east 52,814444 23,643333
353 R419 Russia_northeast 66,888081 136,176853
264 R289 Russia_west 59,988323 47,909056
303 R345 Russia_west 60,816269 48,402507
223 P098 Poland_east 52,891802 23,51427
295 R337 Russia_west 60,816269 48,402507
198 N0509 Norway 63,134665 8,477809
286 R328 Russia_west 59,80816 50,419522
183 N0494 Norway 60,611573 8,49342
278 R320 Russia_west 59,80816 50,419522
提前谢谢了!
input$GPS_raw_data
返回一个 data.frame,其中包含读取数据所需的信息。 您使用此信息读取所选文件并将其存储在反应式df_GPS_upload
。 因此,您可以访问此对象中的数据:
conversion_long2wide <- eventReactive(input$long2wide_table_button, {
data_arranged <- df_GPS_upload() %>%
select(ID, Assay, Name, Converted) %>%
arrange(Assay)
return(data_arranged)
}
因为df_GPS_upload
是一个反应式,你需要使用df_GPS_upload()
来访问数据。
select_
错误可能来自于您尝试将其应用于input$GPS_raw_data
,如果您使用上面的代码,看看它是否消失。 总的来说, tidyverse
和shiny
不存在兼容性问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.