從該網站指出,前一個問題,看來你要代表
> print(object.size(integer(10000 * 72000)), units="Mb")
2746.6 Mb
這應該是「易」與8 GB你another question引用。另外,總長度小於R中的最大向量長度,所以應該也是可以的。但請參閱響應的結尾,以瞭解重要的警告!
我在R之外創建了製表符分隔版本的數據文件。然後我讀到我感興趣的信息
what <- list(User=integer(), Film=integer(), Rating=numeric(), NULL)
x <- scan(fl, what)
'NULL'丟棄未使用的時間戳數據。 「用戶」和「電影」條目不是順序的,我的平臺上的numeric()
佔用的內存是integer()
的兩倍,因此我將用戶和電影轉換爲因子,並將等級轉換爲整數(),翻倍(原始分數爲1到5以1/2爲增量)。
x <- list(User=factor(x$User), Film=factor(x$Film),
Rating=as.integer(2 * x$Rating))
我然後分配的矩陣
ratings <- matrix(NA_integer_ ,
nrow=length(levels(x$User)),
ncol=length(levels(x$Film)),
dimnames=list(levels(x$User), levels(x$Film)))
,並使用該一個兩列矩陣可被用於索引的另一矩陣
ratings[cbind(x$User, x$Film)] <- x$Rating
這是步驟,其中存儲器使用的事實是最大的。然後我會刪除不需要的變量
rm(x)
的gc()
功能告訴我多少內存我用...
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 140609 7.6 407500 21.8 350000 18.7
Vcells 373177663 2847.2 450519582 3437.2 408329775 3115.4
...有點超過3 GB,所以這是很好的。
已經這樣做了,你現在就運行到嚴重的問題。 k均值(從你的迴應上較早較早答題)不會遺漏值
> m = matrix(rnorm(100), 5)
> m[1,1]=NA
> kmeans(m, 2)
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
和拇指我期望現成的R時的解決方案的一個非常粗略的規則工作需要3-5倍作爲起始數據大小的內存很多。您是否使用較小的數據集進行了分析?
重塑最有可能會工作,或plyr包上的東西 – aatrujillob 2012-01-17 01:28:31
除了使用稀疏矩陣,我建議查看有關R和稀疏矩陣的其他問題,以獲得相關問題的想法:http:// stackoverflow .com/questions/tagged/r +稀疏矩陣 – Iterator 2012-01-19 13:01:09