我需要允许用户上传文件以定义在应用中呈现的网络。
我想改变参数以重新渲染通过特殊闪亮的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脚本中改变参数....
有关如何规避此事的任何提示?
答案 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)