我目前使用推荐器套件制作了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'
任何知道如何逃避其中一个错误的人,请帮助我。
答案 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)