qshng
qshng

Reputation: 887

error with RBGL package in R

I want to install the RGBL package in bioconductor to perform some graph algorithms.

I updated R to the latest version 3.2.0, and installed the package as instructed on http://www.bioconductor.org/

source("http://bioconductor.org/biocLite.R")
biocLite("RBGL")

It was installed successfully, then I tried to run

  library(graph)
  library(RBGL)

  x<- strongComp(graph)

and returns this error

Error in (function (classes, fdef, mtable)  : 
      unable to find an inherited method for function ‘isDirected’ for signature ‘"igraph"’

Here's the traceback

> traceback()
4: stop(gettextf("unable to find an inherited method for function %s for signature %s", 
       sQuote(fdef@generic), sQuote(cnames)), domain = NA)
3: (function (classes, fdef, mtable) 
   {
       methods <- .findInheritedMethods(classes, fdef, mtable)
       if (length(methods) == 1L) 
           return(methods[[1L]])
       else if (length(methods) == 0L) {
           cnames <- paste0("\"", vapply(classes, as.character, 
               ""), "\"", collapse = ", ")
           stop(gettextf("unable to find an inherited method for function %s for signature %s", 
               sQuote(fdef@generic), sQuote(cnames)), domain = NA)
       }
       else stop("Internal error in finding inherited methods; didn't return a unique method", 
           domain = NA)
   })(list("igraph"), function (object) 
   standardGeneric("isDirected"), <environment>)
2: isDirected(g)
1: strongComp(graph)

My system is Windows 32-bit.

I'm not sure if this is enough information. Please let me know if any other information needed.

Any ideas are appreciated, thanks!

EDIT:

I used the igraph packaged to create the graph object from an edge list with weight

  library(igraph)
  graph<- graph.data.frame(edge.list[,c(2:4)],directed=TRUE)

I'm not very good with generating random number, here's a reproducible example for my graph

set.seed(123)
edge.list<-cbind(seq(10),c(1,1,2,3,3,4,5,5,5,5),c(2,2,3,5,4,3,4,4,4,2),
            runif(10, 1, 30))
colnames(edge.list) <-c("ID","V1","V2","weight")

Upvotes: 0

Views: 1538

Answers (1)

MrFlick
MrFlick

Reputation: 206232

As pointed out in the comments, you need to make a graph object, not an igraph object.

Here's how I might transform your edge.list into the form that graph expects.

rawEL <- data.frame(source = as.character(edge.list[,1]),
    edges = as.character(edge.list[,2]),
    weights = edge.list[,3], stringsAsFactors=F
)
V <- unique(c(rawEL$source, rawEL$edges))
edL <- lapply(
    split(
       rawEL[,-1], 
       factor(edge.list[,1], levels=V)
    ), as.list
)
gr <- graphNEL(V, edL, "directed")
plot(gr)

enter image description here

Upvotes: 1

Related Questions