在R中处理大数据时遇到麻烦

时间:2014-11-28 09:52:48

标签: r

我目前使用推荐器套件制作了8k用户和200k项目的推荐系统。

在使用推荐器功能之前,我在将数据帧转换为真实的评级矩阵时遇到了麻烦。

    item_idx                    mem_idx         rating
1   00600015987465341234f7dae4  534122168382b   4
2   0060001660924533ad0cd443e1  53d79f413e3aa   5
3   006000195520453d7ac28e4b4b  53d79f413e3aa   5
4   0060001986642536d6fc77d269  535146eb5af95   4
5   00708969975005409278f828f3  540927366f478   5

这是我数据框的一部分,所有(item_idx,mem_idx)对都是不同的。

mat <- tapply(df$rating, list(df$mem_idx, df$ID), FUN=function(x) x)

我尝试使用此代码将数据帧转换为矩阵,有时成功但通常会出现这样的错误。

Error: cannot allocate vector of size 1.1 Gb

在成功案例中,

r <- as(mat, "realRatingMatrix")

我应用此代码使其成为realRatingMatrix 但我总是因为这个错误而失败

Error in which(x == 0, arr.ind = TRUE) : 
  error in evaluating the argument 'x' in selecting a method for function 'which': Error: (list) object cannot be coerced to type 'double'

任何知道如何逃避其中一个错误的人,请帮助我。

1 个答案:

答案 0 :(得分:2)

将数据帧转换为稀疏矩阵,然后转换为realRatingMatrix类

itm <- factor(data[,1])
mem <- factor(data[,2])

# sparsematrix
s <- sparseMatrix(
    as.numeric(itm), 
    as.numeric(mem),
    dimnames = list(
            as.character(levels(itm)), 
            as.character(levels(mem))),
    x = data[,3])

#convert to realRatingMatrix class
rm <- new("realRatingMatrix",data=s)