2015-11-06 395 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

下次您可以嘗試編輯您的原始答案。我沒有理由刪除它。 –