I have using a user defined function in R for creating Graphs under Rgraphviz package and its working properly when executed in Rstudio
the code is as below
library(Rgraphviz)
library(zoom)
namedvector<- function(names, values) {names(values) = names;values}
render<- function(graph) {
nodes = union(graph$subject, graph$object)
edges = tapply(graph$object, graph$subject, function(x)
for (leaf in setdiff(graph$object, graph$subject))
{edges[[leaf]]= list(edges=NULL)}
# create graph
g<- graphNEL( nodes = nodes, edgeL = edges,edgemode="directed")
# add labels, width, color if given
edgeids = paste(graph$subject, graph$object, sep="~")
edgeAttrs = if (is.null(graph$label)) list() else
g = layoutGraph(g, recipEdges="distinct", edgeAttrs=edgeAttrs)
renderGraph(g)
}
data<-read.table(file.choose(), header=TRUE, sep = ',')
graph = data.frame(subject=data$Source, object=data$Destination)
label=data$Protocol
for (g in list(graph)) {
which give correct output
then i used the same code In R.net as follows
engine = REngine.GetInstanceFromID("RDotNet");
i have used another method also
RF_RES_STATIC = @"render<- function(graph){
engine.EagerEvaluate("data<-read.csv(file.choose(), header=TRUE, sep = ',')");
please help me to solve this problem i have tried a lot but is not working........please
the code is as below
library(Rgraphviz)
library(zoom)
namedvector<- function(names, values) {names(values) = names;values}
render<- function(graph) {
nodes = union(graph$subject, graph$object)
edges = tapply(graph$object, graph$subject, function(x)
list(edges=as.character(x)), simplify=F)
# add edges for object-only nodes (leafs)for (leaf in setdiff(graph$object, graph$subject))
{edges[[leaf]]= list(edges=NULL)}
# create graph
g<- graphNEL( nodes = nodes, edgeL = edges,edgemode="directed")
# add labels, width, color if given
edgeids = paste(graph$subject, graph$object, sep="~")
edgeAttrs = if (is.null(graph$label)) list() else
list(label=namedvector(edgeids, as.character(graph$label)) )
if (!is.null(graph$col))edgeRenderInfo(g)<- list(col=namedvector(edgeids,as.character(graph$col)))
if (!is.null(graph$width))edgeRenderInfo(g)<- list(lwd=namedvector(edgeids,graph$width))
if (!is.null(graph$label))edgeRenderInfo(g)<- list(label=namedvector(edgeids,as.character(graph$label)))
# layour and renderg = layoutGraph(g, recipEdges="distinct", edgeAttrs=edgeAttrs)
renderGraph(g)
}
data<-read.table(file.choose(), header=TRUE, sep = ',')
graph = data.frame(subject=data$Source, object=data$Destination)
label=data$Protocol
for (g in list(graph)) {
render(cbind(g, label=label))
zm(type="s")
}which give correct output
then i used the same code In R.net as follows
engine = REngine.GetInstanceFromID("RDotNet");
engine.EagerEvaluate("library(Rgraphviz)");
engine.EagerEvaluate("library(zoom)");
engine.EagerEvaluate("namedvector<- function(names, values) {names(values) = names;values}");
engine.EagerEvaluate("render<- function(graph)");
engine.EagerEvaluate("{");
engine.EagerEvaluate("{nodes = union(graph$subject, graph$object)");
engine.EagerEvaluate(" edges = tapply(graph$object, graph$subject, function(x)");
engine.EagerEvaluate("list(edges=as.character(x)), simplify=F)");
engine.EagerEvaluate("for (leaf in setdiff(graph$object, graph$subject)){ ");
engine.EagerEvaluate("edges[[leaf]]= list(edges=NULL)}");
#engine.EagerEvaluate("g<- graphNEL( nodes = nodes, edgeL = edges)");
engine.EagerEvaluate("edgeids = paste(graph$subject, graph$object, sep=\"~\")");
engine.EagerEvaluate(" edgeAttrs = if (is.null(graph$label)) list() else");
engine.EagerEvaluate("list(label=namedvector(edgeids, as.character(graph$label)) )");
engine.EagerEvaluate(" if (!is.null(graph$col))");
engine.EagerEvaluate("edgeRenderInfo(g)<- list(col=namedvector(edgeids,as.character(graph$col)))");
engine.EagerEvaluate("if (!is.null(graph$width))");
engine.EagerEvaluate("edgeRenderInfo(g)<- list(lwd=namedvector(edgeids,graph$width))");
engine.EagerEvaluate(" if (!is.null(graph$label))");
engine.EagerEvaluate(" edgeRenderInfo(g)<- list(label=namedvector(edgeids,as.character(graph$label)))");
engine.EagerEvaluate(" g = layoutGraph(g, recipEdges=\"distinct\", edgeAttrs=edgeAttrs)");
engine.EagerEvaluate("renderGraph(g)}");
engine.EagerEvaluate("}");
engine.EagerEvaluate("data<-read.csv(file.choose(), header=TRUE, sep = ',')");
engine.EagerEvaluate("graph=data.frame(subject=data$Source,object=data$Destination)");
//engine.EagerEvaluate("label=data$Protocol");
engine.EagerEvaluate("for (g in list(graph)){");
engine.EagerEvaluate("render(g)}");
errors are shown on the bold lines in the above codei have used another method also
RF_RES_STATIC = @"render<- function(graph){
nodes = union(graph$subject, graph$object);
edges = tapply(graph$object, graph$subject, function(x);
list(edges=as.character(x)), simplify=F);
for (leaf in setdiff(graph$object, graph$subject)){
edges[[leaf]]= list(edges=NULL)};
g<- graphNEL( nodes = nodes, edgeL = edges,edgemode=""directed"");
edgeids = paste(graph$subject, graph$object, sep=""~"");
edgeAttrs = if (is.null(graph$label)) list() else;
list(label=namedvector(edgeids, as.character(graph$label));
if (!is.null(graph$col))
edgeRenderInfo(g)<- list(col=namedvector(edgeids,as.character(graph$col)));
if (!is.null(graph$width))
edgeRenderInfo(g)<- list(lwd=namedvector(edgeids,graph$width));
if (!is.null(graph$label)
edgeRenderInfo(g)<- list(label=namedvector(edgeids,as.character(graph$label)));
g = layoutGraph(g, recipEdges=""distinct"", edgeAttrs=edgeAttrs);
renderGraph(g);
};".Replace(" ", "");
engine = REngine.GetInstanceFromID("RDotNet");
engine.EagerEvaluate("library(Rgraphviz)");
engine.EagerEvaluate("library(zoom)");
engine.EagerEvaluate("namedvector<- function(names, values) {names(values) =names;values}");engine.EagerEvaluate("data<-read.csv(file.choose(), header=TRUE, sep = ',')");
engine.EagerEvaluate(RF_RES_STATIC);
engine.EagerEvaluate("graph = data.frame(subject=data$Source, object=data$Destination)");
//engine.EagerEvaluate("label=data$Protocol");
engine.EagerEvaluate("for (g in list(graph)){");
engine.EagerEvaluate("render(g)}");
this is not showing any error but not shown any plots as out putplease help me to solve this problem i have tried a lot but is not working........please