首先,对于这个可能是愚蠢的问题感到抱歉,但是在使用google 7小时并且正在进行跟踪和跟踪之后,我感到非常沮丧和绝望。错误...
我有一个他们所属的用户ID和组列表。我需要一个共享组的所有用户组合的列表(创建网络图的边缘列表)。我立刻找到了this并且非常高兴,因为它正是我所需要的。我之前从未使用过R,但它似乎很容易解决我的问题。另一个线程中提供的代码完全可以正常工作,但是在我根据需要自定义它以及特别是我的数据输入后,我遇到了问题:
#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 :(得分:0)
问题是
combn(x,2)
当x
是一个整数时,combn
会创建序列1 ... x
并返回该序列中的所有对,如果x
很大,则该对将是一个巨大的数组。如果您有任何组中包含单个用户,则会发生这种情况。
解决方案是过滤掉只有一个用户的所有组:
#create pairs
pairs <- do.call(rbind, sapply(Filter(function(x)
length(x) > 1, split(user, group)), function(x) t(combn(x,2))))