2016-08-13 6 views
0

、すべての最初の本はおそらく愚かな質問には申し訳ありませんが、私は...グーグルを使用し、歩道&エラーをしているの7時間後に作成ペア

を本当にイライラして必死になってる私がリストを持っていますそれらが属するユーザーIDとグループのグループを共有するユーザーのすべての組み合わせの一覧が必要です(ネットワークグラフを作成するためのエッジリスト)。私はすぐにthisを見つけました、そして、それは私が必要とするものなので、本当に幸せでした。前にRを使ったことはありませんでしたが、問題が非常に簡単に解決できるようでした。他のスレッドで提供されているコードをそのまま完全に正常に動作しますが、私のstartet後に私のニーズに合わせてカスタマイズし、特に私が問題に走った私のデータ入力する:

#import a csv, the column "group" consists of groupID, column "user" the userID 
group <- read.csv("E:/r/input.csv")[ ,c('group')] 
user <- read.csv("E:/r/input.csv")[ ,c('user')] 
data.frame(group,user) 

Rでの出力は私にこれを提供します

 group  user 
1 596230112 1514748421 
2 596230112 1529087841 
3 596230112 1518194516 
4 596230112 1514852264 
5 596230112 1514748421 
6 596230112 1511768387 
7 596230112 1514748421 
8 596230112 1514852264 
9 596230112 1511768387 
10 596231111 1535990615 
11 596232665 1536087573 
12 596232665 1488758238 
13 596232665 1536087573 
14 596234505 1511768387 
15 596234505 1535990615 

これまでのところ、とても良いです!次のステップは、ユーザーのペア例えば

1512748421 -> 1529097841 
1512748421 -> 1518194516 

のように...私が使用したコードがあるはずです。

#create pairs 
pairs <- do.call(rbind, sapply(split(user, group), function(x) t(combn(x,2)))) 

私が手にエラーがある:

Error : cannot allocate vector of size 5.7 Gb 
In addition: Warning messages: 
1: In combn(x, 2) : 
    Reached total allocation of 3981Mb: see help(memory.size) 
2: In combn(x, 2) : 
    Reached total allocation of 3981Mb: see help(memory.size) 
3: In combn(x, 2) : 
    Reached total allocation of 3981Mb: see help(memory.size) 
4: In combn(x, 2) : 
    Reached total allocation of 3981Mb: see help(memory.size) 

データセット私は最後に仕事をしたいと思っていますが、始めに私は上記の15人のユーザー/グループのエントリを持っていましたが、それでも動作しません...私はここで何を見ませんか?メモリの制限はすでに自分のコンピュータ(4GB)の最大値に設定されており、ヘルプ機能やRウェブサイトの提案もすべて行いました。

Rバージョン3.3.1、プラットフォーム:x86_64の-W64-MINGW32/x64の

答えて

0

xが整数である場合、問題が

combn(x,2) 

ある、combnシーケンス1 ... xを作成し、そこからすべてのペアを返しますxが大きい場合は巨大配列になります。これは、ユーザーが1人のグループがある場合に発生します。

ソリューションは、一つだけのユーザーを持っているすべてのグループをフィルタリングすることです:

#create pairs 
pairs <- do.call(rbind, sapply(Filter(function(x) 
    length(x) > 1, split(user, group)), function(x) t(combn(x,2)))) 
+0

はそうそんなにありがとう!あなたは私の日を救った! – phil

関連する問題