1

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

我想改变参数以重新渲染通过特殊闪亮 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)})

我试过“graphOutput”和“renderGraph”,但这些功能似乎不存在......

我尝试从 github 下载“renderGraph”。

 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 年以来未更新...

所以最终我的问题是如何改变驻留在“ui.R”代码中的东西的参数???

类似于以下内容(文件上传代码取自: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 脚本中的参数......

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

4

1 回答 1

1

sorted it out with the functions renderRcytoscapejs for the server and rcytoscapejsOutput for the UI also must conserve the class of the data file being read into a reactive value with read.csv with isolate():

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)
于 2016-06-22T10:13:07.033 回答