将Neo4j数据加载到R中

时间:2014-07-23 16:34:40

标签: r neo4j

我试图直接从R访问我的Neo4j数据进行网络分析

我已经读过这个: Use neo4j with R

所以我尝试使用他们的代码:

#install.packages('RCurl')
#install.packages('RJSONIO')

library('bitops')
library('RCurl')
library('RJSONIO')

query <- function(querystring) {
  h = basicTextGatherer()
  curlPerform(url="myhost:7474/db/data/ext/CypherPlugin/graphdb/execute_query",
    postfields=paste('query',curlEscape(querystring), sep='='),
    writefunction = h$update,
    verbose = FALSE
  )           
  result <- fromJSON(h$value())
  #print(result)
  data <- data.frame(t(sapply(result$data, unlist)))
  print(data)
  names(data) <- result$columns

}

q <-"start a = node(50) match a-->b RETURN b"
 data <- query(q)
 print(data)

但我得到的只是:

具有0列和1行的数据框 +打印(数据) NULL

我做错了吗?

2 个答案:

答案 0 :(得分:2)

该函数用于返回表格数据,而您返回一个节点。因此数据帧错误。这个功能也有几个问题;它不能返回1列数据,也没有NULL处理。考虑在这里使用RNeo4j驱动程序:

http://nicolewhite.github.io/RNeo4j/

library(RNeo4j)
graph = startGraph("http://localhost:7474/db/data/")
query = "MATCH (n:`layer_1_SB`)-[r]-> (m) WHERE m:layer_2_SB RETURN n.userid, m.userid"
data = cypher(graph, query)
write.table(data, file = "filename.file")

答案 1 :(得分:1)

所以我解决了我的问题。这就是新代码的样子:

#install.packages('RCurl')
#install.packages('RJSONIO')

library('bitops')
library('RCurl')
library('RJSONIO')

query <- function(querystring) {
  h = basicTextGatherer()
  curlPerform(url="myhost:7474/db/data/cypher",
    postfields=paste('query',curlEscape(querystring), sep='='),
    writefunction = h$update,
    verbose = FALSE
  )           
  result <- fromJSON(h$value())
  #print(result)
  data <- data.frame(t(sapply(result$data, unlist)))
  print(data)
  names(data) <- result$columns
  data

}

q <-"MATCH (n:`layer_1_SB`)-[r]-> (m) WHERE m:layer_2_SB RETURN n.userid, m.userid"
 data <- query(q)
 head(data)
 dim(data)
 names(data)
 write.table(data, file = "/home/angello-maggio/data2.dat", append=FALSE,quote=FALSE,sep=" ",eol="\n", na="NA", dec=".", row.names=FALSE)

正如您所看到的,如果您正在使用neo4j 2.x,您应该使用路径/db/data/cypher而不是/db/data/ext/CypherPlugin/graphdb/execute_query我也忘记了返回数据,并返回名称(数据)代替。

如果您的查询错误,也可能会出现空值。 希望这能帮助那些遇到我问题的人!

相关问题