我试图直接从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
我做错了吗?答案 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
我也忘记了返回数据,并返回名称(数据)代替。
如果您的查询错误,也可能会出现空值。 希望这能帮助那些遇到我问题的人!