2017-09-28 62 views
0

我遇到了矩陣乘法問題。 LMatrix具有381乘381的尺寸,並且directEffects1的尺寸爲381x1。兩者都是數據幀。當我輸入了矩陣乘法不起作用

writeData(wb2, sheet=1, as.matrix(LMatrix)%*%as.matrix(directEffects1)[,1], startCol = 9,startRow = 1,colNames = T, rowNames = FALSE) 

我得到的只有1和0,而矩陣乘法而不是產品1列,381列向量。另外,我需要寫as.matrix(directEffects1)[1],而不是as.matrix(directEffects1),否則我會收到消息:

%*%: non-conformable arguments 

上我應該做的任何意見?我想要兩個變量的381x1產品。

+3

如果你可以製作一個可重複的例子,那將會很棒。當我在R中乘以矩陣時,它工作得很好。但是除非你分享,否則我不能把你的矩陣放大。如果你擺脫了writeData()函數調用,你還會看到問題嗎?這似乎與你的問題沒有關係。如果你用'directEffects1 [1:4,1]'乘以'LMatrix [1:4,1:4]'會怎麼樣?如果仍然顯示問題,那麼你可以與我們共享這些對象的子集(使用'dput()',這樣它們就可以複製粘貼),我們可以嘗試提供幫助。 – Gregor

+1

也分享'directEffects1'的類和尺寸,因爲這似乎是一個問題。也許'str(LMatrix)'和'str(directEffects)'所以我們知道真正存在的是什麼。 – Gregor

回答

0

我不確定你要出錯的地方。我工作了使用隨機生成的數據爲例,有一個合理的答案:

library(openxlsx) 
library(Matrix) 

# Using rnorm and runif to generate random data 
LMatrix = as.data.frame(matrix(rnorm(381*381), nrow=381, ncol=381)) 
directEffects1 = as.data.frame(matrix(runif(381), nrow=381, ncol=1)) 
wb2 <- createWorkbook() 
addWorksheet(wb2, "Matrix") 

writeData(wb2, sheet=1, 
      as.matrix(LMatrix)%*%as.matrix(directEffects1)[,1], 
      startCol = 9, 
      startRow = 1, 
      colNames = T, 
      rowNames = FALSE) 

saveWorkbook(wb2, file = 'C:/test.xlsx') 

這給381 x行1列Excel文件。也許這個代碼(這並不是一個真正的答案,可以讓你開始搞清楚你的​​代碼或數據的哪一部分是在搞砸你?