2015-11-06 396 views
0

我需要使用R从矩阵的每一列中选取前三个值,并将这些值填充到保持器(另一个矩阵)。R ::参数错误不是矩阵

虽然试图做到这一点,我得到一个错误:

Error in t.default(head(n = 3, rownames(trans.cosine[order(trans.cosine[, : 
    argument is not a matrix 

这是R代码我使用:

recsys <- read.csv("H:/Recommender Systems/Recsys.csv") 

recsys.ibs <- (recsys[,!(names(recsys) %in% c("NAME"))])  
recsys.ibs.normalized <- normalize(recsys.ibs, byrow = FALSE) 

n <- recsys$NAME 
trans <- t(recsys.ibs.normalized) 
colnames(trans) <- n 
trans.cosine <- cosine(trans) 
write.csv(trans.cosine, "H:/Recommender Systems/cosine_similarity.csv") 

recsys.neighbours <- matrix(NA, nrow=ncol(trans.cosine),ncol=3,dimnames=list(colnames(trans.cosine))) 


for(i in 1:ncol(trans.cosine)) 
{ 
    recsys.neighbours[i,] <- (t(head(n=3,rownames(trans.cosine[order(trans.cosine[,i],decreasing=TRUE),][i])))) 
} 

我尽快得到的错误,因为我执行以上for循环。

我检查了矢量,他们是矩阵。但我仍然得到错误。

> class(trans.cosine) 
[1] "matrix" 
> class(recsys.neighbours) 
[1] "matrix" 

对此的任何帮助都会非常有用。

谢谢

+1

检查表达式的每个RHS。这应该是显而易见的错误。 –

+1

@TimBiegeleisen - 感谢您的建议。我正按照您的建议检查每个表达式,并在进入for循环之前将“trans.cosine”转换为数据框。它正在工作。再次感谢。 – Arun

回答

2

你举的例子是不可复制的,但因为你使用[i]你得到它没有rownames单号,让你得到

t(NULL) 
# Error in t.default(NULL) : argument is not a matrix 

可能发生而不[i]同如果矩阵没有rownames。无论哪种方式,rownames都会返回一个向量,所以在这里使用t没有意义。 head(3,也很奇怪,用[1:3]

+0

下次您可以尝试编辑您的原始答案。我没有理由删除它。 –