【发布时间】:2016-01-29 17:36:16
【问题描述】:
我正在尝试创建一个大的 0 矩阵,以便在插入和转换一些数据后将其转换为网络对象。我使用的数据是用户 ID 及其朋友 ID 的列表。我正在使用我在此处找到的代码 [http://www.shizukalab.com/toolkits/sna/sna_data] 将用户和朋友之间的连接转换为 1。然后我可以使用statnet 和igraph 来分析数据。当我尝试根据我的 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 用户,所以我可能会忽略一些明显的东西。任何想法都非常感谢。
【问题讨论】:
-
您尝试初始化的矩阵有多大?即
dym的值是多少 -
不确定这是否仍然是一个悬而未决的问题,但我没有看到您在任何地方使用
bigmemory。您想要创建一个 big.matrix 对象,而不是创建一个常规矩阵。查看 ?big.matrix 中的示例。
标签: r matrix r-bigmemory