2016-10-30 25 views
2

mlbenchパッケージにデータセットBreastCancerを使用しています。以下の行列乗算をロジスティック回帰の一部として実行しようとしています。Rでの行列乗算:数値/複素行列/ベクトル引数が必要

私は最初の10列の機能を持って、そしてシータと呼ばれるパラメータのベクトルを作成します。

X <- BreastCancer[,1:10] 
theta <- data.frame(rep(1,10)) 

それから私は、次の行列の乗算をした:

constant <- as.matrix(X) %*% as.vector(theta[,1]) 

はしかし、私が得ました次のエラー:

Error in as.matrix(X) %*% as.vector(theta[, 1]) : 
    requires numeric/complex matrix/vector arguments 

私はを使用して倍増するマトリックスをキャストする必要がありますか最初に?私が見るようにXの値は二重引用符で文字列のようなものです

編集: @Zheyuan李:それは同じ問題を持っていないよう

私の質問は、あなたが参照しているものとは異なります私が持っている通り:numeric/complex matrix/vector arguments。質問を再度開いてください。ありがとうございました

+0

私が持っているのと同じ問題はないので、あなたが指している質問とは異なる@Zheyuan Li: '数値/複雑な行列/ベクトル引数'。質問を再度開いてください。ありがとうございました – TonyGW

+0

後で 'ID'列について心配するか、単にそれを落とすことができます。要するに、ID列には何の問題もありません。 – TonyGW

+0

あなたのコードが何をしているのか分かりませんが、あなたのコードを実行した結果、X2で完全にビザデータを取得しました。私の元の問題は解決しません。 – TonyGW

答えて

4

いいえ、私はそれを立てることができます...あなたの質問の下でかなり長い議論と議論の後、私はこれを再開し、それに答えるよりも良い方法を感じませんでした。あなたは回帰モデルを持っている場合

## drop incomplete data with NA 
dat <- na.omit(BreastCancer) 

## data type convert for variables other than `ID` and `Class` 
dat[2:10] <- lapply(dat[2:10], function (x) as.numeric(levels(x)))[x]) 

## get the matrix 
X <- data.matrix(dat[2:10]) 

## some possible matrix-vector multiplications 
beta <- runif(9) 
yhat <- X %*% beta 

## add prediction back to data frame 
dat$prediction <- yhat 

私も理解していないいくつかのものがあります...なぜあなたはpredictを使用していませんか?あなたは説明をしましたが、私はそれを全く得ていません。とにかく、上記は包括的でなければなりません。データフレームが必要な場合は、それがあります。正当な数値の列に行列とベクトルの乗算を使用する場合は、先に進んでください。予測をデータフレームに戻したい場合は、それも実行されます。


This line also worked for me: as.matrix(sapply(dat, as.numeric))

あなたはラッキーだったように見えます。データセットには、数値と同じレベルの因子レベルが存在します。一般に、因子を数値に変換するには、私が行った方法を使用する必要があります。

f <- gl(4, 2, labels = c(12.3, 0.5, 2.9, -11.1)) 
#[1] 12.3 12.3 0.5 0.5 2.9 2.9 -11.1 -11.1 
#Levels: 12.3 0.5 2.9 -11.1 

as.numeric(f) 
#[1] 1 1 2 2 3 3 4 4 

as.numeric(levels(f))[f] 
#[1] 12.3 12.3 0.5 0.5 2.9 2.9 -11.1 -11.1 

の比較について?factorよくお読みください。

+0

実際には、この行も私のために働いていました。マトリックス(サプリー(dat、as.numeric)) '。ありがとう助け:)私也是中国人:) – TonyGW

+0

行列/ベクトルの乗算を許可するという点で、これは動作します: 'as.matrix(sapply(dat、as.numeric))' – TonyGW