在这个小插图中,我们将看看另一个强大的用例H5VC
这就是交互式数据探索。这是一个很好的工具,可以将你的结果传达给我们的合作者。
如果您想先查看最终结果,请先返回到Rstudio Shiny Server托管服务,我们在那里展示了示例闪亮的应用程序。*最小的基因组浏览器*最小的变体浏览器
对于这个小插图来说,你必须知道:*创造概率(参见相应的小插图)*编写简单的闪亮应用程序(看他们文件)
我们将使用我们在中创建的酵母Tally文件h5vc.creating.tallies.
Vignette作为我们的单数据输入。
我们写的闪亮的应用程序是最基本的基因组浏览器可以想象,它将控制染色体,基因组位置和窗口大小(即缩放水平)的当前视图,它将生成一个mismatchplot.
从Tally文件和向我们展示Tally文件中存在的所有样本中的基因组的各个区域的输入。
这个闪亮的应用程序包含两个文件:UI.R.
定义用户界面和服务器。R
定义UI将填充UI的计算/绘图。
在用户界面文件中,我们定义了sliderinput.
对于Windowsize和另外两个输入chromSelect
和GenomicPositionSelect.
这将由服务器生成。我们这样做是因为可用的染色体依赖于计数文件和可用的位置依赖于被选择的染色体。
图书馆(亮)shinyUI (pageWithSidebar(#应用程序标题headerPanel(“简单的基因组浏览器”),#栏与滑块输入和选择框sidebarPanel (sliderInput(“windowsize”、“windowsize:“min = 10, max = 200,值= 50,步骤= 5),uiOutput(“chromSelect”),uiOutput(“genomicPositionSelect”)),#显示区域mainPanel(plotOutput("mismatchPlot", height=800))))
在服务器。R
我们应用程序的逻辑存储,基本上我们加载所需的包,查看Tally文件以检查染色体和染色体长度,然后生成用户选择染色体和位置的控制。
主要的计算发生在输出$ mismatchplot.
,我们是使用用户选择的染色体和位置和Windowsize,并从Tallyfile获取各个数据。然后将数据交给了mismatchplot.
函数并创建我们发回给用户(即web浏览器)的情节。
library(shiny) library(h5vc) library(rhdf5) tallyFile <- "酵母。hfs5" study <- "/酵母" h5ls(tallyFile)染色体<- h5ls(tallyFile) chromlength< - as。$name names(chromlength) = chromosome #定义生成和绘制随机分布所需的服务器逻辑输出){输出$ chromSelect < - renderUI ({selectInput(“铬”、“染色体”,选择= c(“我”、“二世”、“三世”、“四”、“V”、“六世”、“七”、“八世”,“九”,“X”、“喜”、“十二”,“十三”,“十四”、“十五”、“十六”,“水”))})输出美元genomicPositionSelect < - renderUI ({sliderInput(“gpo”、“基因组位置:min = 10, max = chromlengths输入$铬- 10,value = 200)}) group <- reactive({paste(study, $chrom, sep="/")}) sampleData <- reactive({sd = getSampleData(tallyFile, group());sd $示例= c(“YB210”、“s288c”);sd}) pos < -活性({min (max(输入windowsize + 1美元,gpo美元),chromlengths windowsize美元[输入$铬]-输入- 1)})数据< -活性({h5dapply (tallyFile、组(),blocksize =输入windowsize * 3美元,名字= c(“保险”,“数量”,“删除”),范围= c (max (pos()——输入windowsize美元,0)、min (pos() +输入windowsize美元,$mismatchPlot <- renderPlot({p = mismatchPlot(data(), sampleData(), samples = c("s288c","YB210"), input$windowsize, pos())) print(p)})})
显然这个基因组浏览器限制了使用在其当前状态,但通过添加文件的变量作为输入并使它们selectabe我们可以把它变成一个浏览器调用和潜在的变体可以轻而易举地通过这些检查该地区了解我们的电话的质量。有很多潜力可以创造非常有用和视觉上令人印象深刻的方式,将您的研究与您的合作者和同行交流。
我们使用以下代码使用构建功能来调用VariantsH5VC
。从角度来看,我们称之为变体YB210紧张,服用S288C.紧张是我们的控制。
图书馆(RHDF5)库(H5VC)Setwd(“〜/ ShinyApps /酵母”)Tallyfile < - “酵母.HFS5”研究< - “/酵母”H5LS(Tallyfile)染色体< - H5LS(Tallyfile)染色体< - 亚染色体(染色体,otype ==“h5i_group”和name!=“yeast”)$ name variantcalls < - list()for(染色体中的chromosomes){group < - parte(scopard,sep =“/”)sdat < - getSampledata(TallyFile,Group)SDAT $ Group < - “酵母”VariantCalls [[chrom]] < - h5dapply(filename = tallyfile,group = group,blocksize = 100000,fun = callvariantspairedfancy,sampledata = sdat,cl = vconfparams(returndatapoints = true,minstrandAltsupport = 4),名称= C(“计数”,“覆盖范围”,“参考”),verbose = true)} for(染色体中的Chromosomes){variantcalls [[chrom]] < - do.call(rbind,variantcalls [[chrom]])} Variantcalls < - do.call(Rbind,Variantcalls)Rownames(VariantCalls)= Null VariantCalls $ Support = VariantCalls $ CaseCountFWD + VariantCalls $ Casecountrev VariantCalls $ Coverage = VariantCalls $ CasecoverageFWD + VariantCalls $ CasecoveraGerev Variantcalls $ AF = VariantCalls $ Support / VariantCalls $ Coverage保存(VariantCalls,File =“Yeast.Variants.rda”)
现在我们必须对基因组浏览器的闪亮应用做一些改变,这样它就能加载变量列表,让我们可以浏览和过滤它们。下面所述努力的结果链接在这里:*最小的变体浏览器
我们将对界面进行三次更改:1。我们移动mismatchplot.
到一个单独的标签页,并添加另一个标签页,该标签页将包含所有满足当前过滤条件的变体的表,以及一个标签页显示过滤的变体的摘要POTS(目前等位基因频率的直方图)。2.我们在侧边栏添加过滤选择器,我们将允许对等位基因频率(AF.
列),支持和覆盖3.我们用变体选择器更换基因组位置选择器
新UI.R.
看起来像这样:
库(闪亮)ShinyUI(PageWithsidebar(#应用程序标题标题Panel(“简单变体浏览器 - 酵母队)),#侧栏具有滑块输入和选择框侧巴盖(SliderInput(”Windowsize“,”Windowsize:“,Min = 10,max = 200,值= 50,步骤= 5),uioutput(“chracelect”),sliderinput(“af”,“等位基因频率:”,min = 0,max = 1,值= c(0.1,1.0),步骤= 0.01),SLIDERINPUT(“MINSUPPORT”,“最小支持”,MIN = 2,MAX = 200,值= 2),SLIDERINPUT(“MINCOVERAGE”,“最小覆盖”,MIN = 10,MAX = 500,值= 50,步骤= 5),UiOutput(“VariantSelect”),TextOutput(“Diag”)),#显示一个区域MainPanel(TabsetPanel(TabPanel(Title =“区域不匹配绘图”,PlotOutput(“Mismatchplot”,Height =800)),TabPanel(标题=“变体表”,TableOutput(“VariantTable”)),TabPanel(标题=“变体摘要图”,PlotOutput(“afhist”)))))))))))))))))))))))))))))
在这里,我们必须添加代码来加载变量调用,动态生成变量选择器,并更新一些方法来生成绘图/计算绘图的当前位置(因为这现在取决于所选择的变量)。
新服务器。R
看起来像这样:
library(shiny) library(h5vc) library(rhdf5) library(ggplot2) library(grid) tallyFile <- "酵母。hfs5" study <- "/酵母" h5ls(tallyFile)染色体= h5ls(tallyFile) chromlength= as。数值(subset(chromosome, otype == "H5I_DATASET" & name == "Reference")$dim)染色体(chromosome,otype = = " H5I_GROUP " &名字! =“酵母”)$指名道姓(chromlengths) =染色体负载(文件=“yeast.variants.RDa”)variantCalls开始< - variantCalls开始美元+ 1 #解决差异计算基于与基于variantCalls < - variantCalls结束结束美元+ 1 #定义服务器逻辑生成和情节随机分布所需shinyServer(功能(输入,output) { output$chromSelect <- renderUI({ selectInput( "chrom", "Chromosome", choices = c("I","II","III","IV","V","VI","VII","VIII","IX","X","XI","XII","XIII","XIV","XV","XVI", "Mito")) }) group <- reactive({ paste( study, input$chrom, sep="/" ) }) sampleData <- reactive({ sd = getSampleData( tallyFile, group() ); sd$Sample = c("YB210","s288c"); sd }) variants <- reactive({ subset( variantCalls, seqnames == input$chrom & AF >= input$af[1] & AF <= input$af[2] & Support >= input$minSupport & Coverage >= input$minCoverage ) }) output$variantSelect <- renderUI({ tmp = seq(nrow(variants())) names(tmp) = paste( variants()$start, " - ", variants()$refAllele, "/", variants()$altAllele, sep="" ) selectInput( "var", "Variant:", choices = tmp ) }) pos <- reactive({ variants()$start[as.numeric(input$var)] }) data <- reactive({ if( nrow(variants()) > 0 ){ h5dapply( filename = tallyFile, group = group(), blocksize = input$windowsize*3, names = c("Coverages","Counts","Deletions"), range = c( max( pos() - input$windowsize, 0 ), min( pos() + input$windowsize, chromlengths[input$chrom] ) ) )[[1]] }else{ NULL } }) output$mismatchPlot <- renderPlot({ if( nrow(variants()) > 0 ){ p = mismatchPlot( data(), sampleData(), samples = c("s288c","YB210"), input$windowsize, pos() ) print(p) } }) output$variantTable <- renderTable({ variants()[,c("seqnames", "start", "refAllele", "altAllele", "AF", "Support", "Coverage")] }) output$afHist = renderPlot({ hist( variants()$AF, breaks = seq(0,1,0.01) ) }) })
这样你就有了,你自己的浏览器已经准备好部署在网络上,让你的合作者或你论文的读者可以随意访问、浏览和过滤。我们把这些都做完了One hundred.
行代码。
还有一系列其他有用的图表,可以添加到此工具中的过滤器和功能,下载过滤的变体或生成的绘图是更明显的绘图。