繁体   English   中英

R 闪亮 - 使用操作按钮对加载的数据执行单独的操作

[英]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 ,如果您使用上面的代码,看看它是否消失。 总的来说, tidyverseshiny不存在兼容性问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM