Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RNeo4j cypher - retrieving paths

I'm trying to extract a sub-graph from a global network (sub-networks of specific nodes to a specific depth).

The network is composed of nodes labeled as Account with a property of iban and relationships of TRANSFER_TO_AGG.

The cypher syntax is as followed:

MATCH (a:Account { iban :'FR7618206004274157697300156' }),(b:Account),
p = allShortestPaths((a)-[:TRANSFER_TO_AGG*..3]-(b))
RETURN p limit 250

This works perfectly on the Neo4J web interface. However, when trying to save the results to an R object using the command cypher I get the following error:

"Error in as.data.frame.list(value, row.names = rlabs) : 
  supplied 92 row names for 1 rows"

I believe this is due to the fact that if returning data, you can only query for tabular results. That is, this method has no current functionality for Cypher results containing array properties, collections, nodes, or relationships.

Can anyone offer a solution ?

like image 225
Yoav Yeled Teva Avneon Avatar asked Oct 20 '22 01:10

Yoav Yeled Teva Avneon


1 Answers

I've recently added functionality for returning pathways as R objects. First, uninstall / reinstall RNeo4j. Then, see:

?getSinglePath

?getPaths

?shortestPath

?allShortestPaths

?nodes

?rels

?startNode

?endNode

For your query specifically, you would use getPaths():

library(RNeo4j)
graph = startGraph("http://localhost:7474/db/data/")

query = "
MATCH (a:Account { iban :'FR7618206004274157697300156' }),(b:Account),
p = allShortestPaths((a)-[:TRANSFER_TO_AGG*..3]-(b))
RETURN p limit 250
"

p = getPaths(graph, query)

p is a list of path objects. See the docs for examples of using the apply family of functions with a list of path objects.

like image 153
Nicole White Avatar answered Oct 24 '22 11:10

Nicole White