Nếu bạn chỉ muốn phân phối cấp độ, bạn có thể không cần gói đồ thị. Tôi khuyên bạn nên bigtablulate package để
- đối tượng R của bạn đang tập tin sao lưu để bạn không bị giới hạn bởi RAM
- bạn có thể parallelize việc tính toán mức độ sử dụng
foreach
Check-out their website để biết thêm chi tiết . Để đưa ra một ví dụ nhanh về cách tiếp cận này, trước tiên hãy tạo một ví dụ với một edgelist liên quan đến 1 triệu cạnh trong số 1 triệu nút.
set.seed(1)
N <- 1e6
M <- 1e6
edgelist <- cbind(sample(1:N,M,replace=TRUE),
sample(1:N,M,replace=TRUE))
colnames(edgelist) <- c("sender","receiver")
write.table(edgelist,file="edgelist-small.csv",sep=",",
row.names=FALSE,col.names=FALSE)
Tôi kết nối lại tệp này 10 lần để làm ví dụ lớn hơn một chút.
system("
for i in $(seq 1 10)
do
cat edgelist-small.csv >> edgelist.csv
done")
Tiếp theo, chúng tôi tải gói bigtabulate
và đọc trong tệp văn bản với edgelist của chúng tôi. Lệnh read.big.matrix()
tạo ra một đối tượng tập tin hậu thuẫn ở R.
library(bigtabulate)
x <- read.big.matrix("edgelist.csv", header = FALSE,
type = "integer",sep = ",",
backingfile = "edgelist.bin",
descriptor = "edgelist.desc")
nrow(x) # 1e7 as expected
Chúng tôi có thể tính toán bằng cách sử dụng outdegrees bigtable()
trên cột đầu tiên.
outdegree <- bigtable(x,1)
head(outdegree)
kiểm tra sự tỉnh táo nhanh để đảm bảo bảng đang làm việc như mong đợi:
# Check table worked as expected for first "node"
j <- as.numeric(names(outdegree[1])) # get name of first node
all.equal(as.numeric(outdegree[1]), # outdegree's answer
sum(x[,1]==j)) # manual outdegree count
Để có được indegree, chỉ cần làm bigtable(x,2)
.
Khi bạn nói "phân tích", bạn có thể cụ thể hơn về những gì bạn đang cố gắng làm không? – ose
Tất nhiên. Tôi muốn tính toán độ (trong, ngoài, tổng số), mà tôi sẽ sử dụng để vẽ các bản phân phối. Tôi muốn có thể di chuyển các nút và các cạnh từ đồ thị lớn đến các đồ thị nhỏ hơn (các quy trình lấy mẫu), trong đó add.vertices và add.edges từ igraph rất tiện dụng. –
Định dạng dữ liệu là gì? Có phải là người dùng nhạc cụ đơn độc 60 GB không? (tức là nó là một tập tin văn bản mà mỗi hàng có chứa hai số đại diện cho người gửi và người nhận của một cạnh duy nhất?) –