rcytoscapejs:不同的参数 - ' renderGraph'功能不可用

时间:2016-06-20 18:50:22

标签: graph shiny shinyjs

我需要允许用户上传文件以定义在应用中呈现的网络。

我想改变参数以重新渲染通过特殊闪亮的github包部署的交互式闪亮图表 - " rcytoscapejs":https://github.com/cytoscape/r-cytoscape.js/tree/master

虽然图表部署得很好,但我的问题是它只能从UI部署,独立于服务器......

 g<-createCytoscapeJsNetwork(nodeData = nodes, edgeData = edge)
 #ui.R
 dashboardBody(
  sliderInput(inputId="num", label="Choose coef", value=2, min=1, max=3),
  rcytoscapejs(g$nodes, g$edges)
 )

正如您所看到的,当我尝试通过以下方式在服务器中实现代码时,这完全是公正的:

 #ui.R
 graphOutput("graph")
 #server.R
 output$graph<-renderGraph({rcytoscapejs(g$nodes, g$edges)})

我试过&#34; graphOutput&#34;和#34; renderGraph&#34;但功能似乎不存在......

我尝试下载&#34; renderGraph&#34;来自github。

 devtools::install_github("mfontcada/renderGraph");
 Downloading GitHub repo mfontcada/renderGraph@master
 from URL https://api.github.com/repos/mfontcada/renderGraph/zipball/master
 Error: Does not appear to be an R package (no DESCRIPTION)

但该套餐版本为0.1,自2014年以来一直没有更新......

所以最终我的问题是如何改变居住在&#34; ui.R&#34;代码???

类似以下内容,(文件上传代码取自:http://shiny.rstudio.com/gallery/file-upload.html):

  server <- function(input, output) {
   dataInput <- eventReactive(input$choices, {
     inFile <- input$file1
     if (is.null(inFile))
       return(NULL)
       read.csv(inFile$datapath, header = input$header, sep = input$sep, quote = input$quote)
     createCytoscapeJsNetwork(nodeData = nodes, edgeData = edge)
   })
  }

#ui.R  
actionButton("choices", "Run analyses"),
fileInput('file1', 'Choose file to upload',
          accept = c(
            'text/csv',
            'text/comma-separated-values',
            'text/tab-separated-values',
            'text/plain',
            '.csv',
            '.tsv'
          ),
 rcytoscapejs(dataInput()$nodes, dataInput()$edges),

这当然会返回一个错误,因为不能在ui.R脚本中改变参数....

有关如何规避此事的任何提示?

1 个答案:

答案 0 :(得分:1)

使用服务器的renderRcytoscapejs函数对其进行排序,并且UI的rcytoscapejsOutput也必须使用带有isolate()的read.csv保存正在读取的反应值的数据文件的类:

library(shinydashboard)
library(rcytoscapejs)
p1<-cor(t(E.rna_small[1:20,1:20]),use="p") #correlations taken from sample of matrix
library(graph) #as per P Shannon's help must convert to way that is compatible with RCyjs
library(RCyjs)
library(igraph)
g<-igraph.to.graphNEL(simplify(graph_from_adjacency_matrix(p1, weighted=T)))
edge<-as.data.frame(get.edgelist(simplify(graph_from_adjacency_matrix(p1, weighted=T))))
colnames(edge)<-c("source", "target")
nodes<-cbind(id=colnames(p1), name=rownames(p1))
class(nodes)
nodes<-as.data.frame(nodes)
b<-createCytoscapeJsNetwork(nodeData = nodes, edgeData = edge)
uiactual <- dashboardPage(
  dashboardHeader(title="zoom"),
  dashboardSidebar(menuItem(
                   checkboxInput('header', 'Header', TRUE),
                   radioButtons('sep', 'Separator',
                                c(Comma=',',
                                  Semicolon=';',
                                  Tab='\t')
                                )),

                   menuItem(p('If you want a sample .csv or .tsv file to upload,',
                     'you can first download the sample',
                     a(href = 'mtcars.csv', 'mtcars.csv'), 'or',
                     a(href = 'pressure.tsv', 'pressure.tsv'),
                     'files, and then try uploading them.'
                   ))),
  dashboardBody(
    sliderInput(inputId="num", label="Choose coef", value=2, min=1, max=3),
    rcytoscapejsOutput("g3plot"),
    fileInput('file1', 'Choose file to upload',
              accept = c(
                'text/csv',
                'text/comma-separated-values',
                'text/tab-separated-values',
                'text/plain',
                '.csv',
                '.tsv'
              )
    )
  )
)

  serveractual <- function(input, output) {
    g3 <- reactive({
      inFile <- input$file1
      if (is.null(inFile))
        return(NULL)

      isolate(t<-read.table(inFile$datapath, header = T,
                            sep = "\t"))
      #t<-for(i in colnames(t)){
      # as.numeric(t[,i])
      #}

      p1<-cor(t(t),use="p") #correlations taken from sample of matrix
      simplify(graph_from_adjacency_matrix(p1, weighted=T))
      edge<-as.data.frame(get.edgelist(simplify(graph_from_adjacency_matrix(p1, weighted=T))))
      colnames(edge)<-c("source", "target")
      nodes<-cbind(id=colnames(p1), name=rownames(p1))
      nodes<-as.data.frame(nodes)
      createCytoscapeJsNetwork(nodeData = nodes, edgeData = edge)
    })


    output$g3plot = renderRcytoscapejs({
      rcytoscapejs(g3()$nodes, g3()$edges)
    })

  }
shinyApp(uiactual, serveractual)