2017-09-28 6 views
0

行列の乗算に問題があります。 LMatrixは381×381の寸法を持ち、directEffects1は381×1の寸法を持っています。両方ともデータフレームです。私が入力するとき行列の乗算が機能しない

私は、行列乗算の積ではなく、1と0だけの1行、381列ベクトルを取得します。また、私はas.matrix(directEffects1)[1]及びませんas.matrix(directEffects1)を記述する必要がある、または他の私は、メッセージが表示されます:

%*%: non-conformable arguments 

私が何をすべきか上の任意のアドバイスを?私は2つの変数の381x1積を求めます。

+3

再現可能な例を作ることができれば素晴らしいと思います。 Rで行列を掛けるとうまくいく。しかし、あなたがそれらを共有しない限り、あなたの行列を乗算することはできません。 'writeData()'関数呼び出しを取り除いても問題は解決しますか?あなたの質問には関係していないようです。 'LMatrix [1:4,1:4]'に 'directEffects1 [1:4、1]'を掛け合わせるだけではどうでしょうか?それでも問題が見える場合は、それらのオブジェクトのサブセットを(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ファイルを提供しています。おそらくこのコード(実際には答えではありません)は、あなたのコードやデータのどの部分があなたを悩ませているかを把握し始めることができますか?