On Wed, Jul 18, 2012 at 11:38:59AM +0200, Petr Savicky wrote: > On Tue, Jul 17, 2012 at 12:31:38PM +0200, Peppe Ricci wrote: > > Hi guys, > > > > I need some help to analyzing my data. > > I start to describe my data: I have 21 matrices, every matrix on the > > rows has users and on columns has items, in my case films. > > Element of index (i, j) represent the rating expressed by user i about item > > j. > > I have a matrix for each of professions. > > An example of a this type of matrix is: > > > > item 1 item 2 item 3 item4 > > id user 1 1 ? ? 5 > > id user 2 ? 3 3 ? > > id user 3 2 ? 3 2 > > id user 4 ? ? ? 4 > > ... > > So user 1 don't like item 1 but he likes so much item 4, for item 2 > > and 3 he hasn't expressed a rating, etc. > > I need to construct a tensor with n users, m items and 21 occupations. > > After I have construct the tensor I want apply Parafac. > > I read data from a CSV file and build each matrix for each occupation. > > [...] > > I have implemented this code but I have one error in correspondance of: > > > > for ( i in 1:m){ > > Z[i,,]=table(occ,UserItem[,i]) > > } > > > > and error is: > > > > Error in > > Z[i,,]=table(occ,UserItem[,i]) > > the number of elements to be replaced is not a multiple of the length > > of substitution > > Hi. > > The problem in this code is that the command > > UserItem <- rbind(M1, M2, ..., M21) > > produces a matrix and not a data.frame. Due to this, the commands
Hi. Let me include a few more comments. The function rbind() preserves the types "matrix" and "data.frame". So, if Mi are indeed matrices, then the above applies. > UserItem[, j] <- factor(UserItem[, j], levels=1:5) > > do not convert the columns to factors, but the columns remain numeric. > Due to this, the table created as > > table(occ, UserItem[, i]) > > may not have the full size, since the columns correspond only to > preferences, which do occur in UserItem[, i], and not to all possible > preferences. This can be demonstrated by the following example. occ <- 1:3 pref <- c(1, 3, 4) table(occ, pref) pref occ 1 3 4 1 1 0 0 2 0 1 0 3 0 0 1 and table(occ, pref=factor(pref, levels=1:5)) pref occ 1 2 3 4 5 1 1 0 0 0 0 2 0 0 1 0 0 3 0 0 0 1 0 Hope this helps. Petr Savicky. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.