2014-07-23 40 views
0

我想直接從R接入我Neo4j的數據做一些網絡分析加載Neo4j的數據爲R

我已經閱讀: 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 + 打印(數據)01的數據幀NULL

我做錯了什麼?

回答

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我也忘了返回數據,並返回名稱(數據)。

如果您的查詢錯誤,也可能發生空值。 希望這能幫助那些有我的問題的人!

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")