R在尝试创建大型矩阵时崩溃

时间:2015-10-29 14:11:09

标签: r matrix r-bigmemory

我正在尝试创建一个0的大矩阵,以便在插入和转换某些数据后将其转换为网络对象。我使用的数据是用户ID及其朋友的列表'标识。我使用我在此处找到的代码[http://www.shizukalab.com/toolkits/sna/sna_data]将用户和朋友之间的连接转换为1。然后,我可以使用statnetigraph来分析数据。当我尝试根据我的数据维度创建矩阵时,会出现问题,因为我的R会话不断中止。

为了特殊性,我会展示我的整个过程,因为我认为问题不是内存或系统问题,而是我的数据问题。

所以我首先将数据子集化,给我两列,用户ID和他们的朋友。然后我折叠它并从中创建了一个txt文件,然后我将其扫描到内存中。

registerDoMC(cores = 3)
library(bigmemory)

yelpNetwork <- select(training, c(4:5))
yelpNetwork$friends <- vapply(yelpNetwork$friends, paste, collapse = ",",  character(1L))
write.table(yelpNetwork, "yelpNetwork.txt", row.names = FALSE)

##Scan in a file with IDs as character strings {even if numeric"}, and with fields separated by commas
dat=scan("yelpNetwork.txt", what="character",sep="\n")

以下是dat看起来的摘录:

[1] "\"user_id\" \"friends\""                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
[2] "\"--0KsjlAThNWua2Pr4HStQ\" \"nELVJlkX8T0mUAArSPSJxw D4v0v5fHzxYLWaXl8gTHqQ 3Uj1YjuShWl6i5in-80sGw WmAhGvWfztnCNrGak8Zf-A VFL4LY37bEvyDPobGoxvXg tyRSwnzsdQDi4WlEBw5RCg VSP01oJh4hrM7KngLZStWw 7g3CFT7P4yfRmPm1rDimSA np418-wlhgpteqef4rn_nQ vK8Ymi2Z6rk3OgkTuMt6Fw\""                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
[3] "\"--20-ljZD5NnAnkwBBC_uQ\" \"tRN04Yo_qnir-y9RXqQ5qg\""                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
[4] "\"--2QZsyXGz1OhiD4-0FQLQ\" \"\""  

然后我读了dat的长度来确定尺寸并尝试创建矩阵。 Rstudio运行似乎很长一段时间然后崩溃。

# Store the number of lines in the file
dym=length(dat)

# Create a dymXdym matrix of zeros
m<-matrix(data=0,nrow=dym,ncol=dym)  

同样,我不认为这是一个记忆或系统问题。基于其他StackOverflow讨论,我使用bigmemory包并在我的四个核心中的三个上运行。这是sessionInfo的一部分,我有16GB RAM。我也在运行Rstudio v.0.99.486,几周前我刚刚升级了。

R version 3.2.2 (2015-08-14)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.1 (El Capitan)

我不是最先进的R用户,所以我可能会忽视一些明显的东西。非常感谢任何想法。

1 个答案:

答案 0 :(得分:1)

我相信这是由于矩阵中内部最多2 ^ 31个细胞的内部R-极限所致。当您达到2 ^ 31时,R有许多限制。当您希望将每个用户与其他用户配对时,您将达到约50000个用户的限制。

我的建议是使用稀疏矩阵。大概您的大多数用户只是朋友,而他们占整个用户列表的一小部分,因此您的矩阵大部分为零。对于这类问题,稀疏矩阵也将更快。