R ::参数中的错误不是矩阵

时间:2015-11-06 05:03:21

标签: r

我需要使用R从矩阵的每列中选取前3个值,并将值填充到持有者(另一个矩阵)。

在尝试执行此操作时,我收到错误消息:

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 个答案:

答案 0 :(得分:2)

您的示例不可重复,但由于您使用的是[i],因此您会得到一个没有rownames的数字,以便您获得

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

如果矩阵没有rownames,那么在没有[i]的情况下也会发生同样的情况。无论哪种方式,rownames都会返回一个向量,因此在这里使用t没有意义。 head(3,也很奇怪,请使用[1:3]