11

以下のコードでは、単一の予測子で K 個の最近傍を使用しようとしています。私の理解では、 の例のtrain.X数を の例の数と一致させる必要はありませんが、入力を正しく解析してtest.XRないようです。

library(ISLR)
library(class)

train=(Weekly$Year<2009)
train.X = Weekly$Lag2[train]
test.X = Weekly$Lag2[!train]
train.Direction = Weekly$Direction[train]
knn.pred = knn(train.X, test.X, train.Direction, k=1)

上記のコードを実行すると、エラーが発生します

   Error in knn(train.X, test.X, train.Direction, k = 1) :   
      dims of 'test' and 'train' differ                       

どうすれば修正でき、train.X正しく解析できますか?test.XR

4

2 に答える 2

3

これは、行列、配列、またはデータ フレームをサブセット化するときに、R が自動的に最小次元数に強制しようとするためです。データフレームの次元が失われないようにするには、デフォルトで に設定されているサブセット関数を使用できますdrop=FALSE

train.X <- subset(Weekly[train],select="Lag2")

論理式をパラメーターとして使用して、保持する行または要素を示すこともできます。

train.X <- subset(Weekly,Year<2009,select="Lag2")

train.X$Lag2サブセット関数は、有効な列として使用できるように、列名をそのまま保持します。別の回答で提案されているように data.frame または as.data.frame を使用すると、元の名前情報が失われます。

> names(train.X)
[1] "Lag2"
于 2015-03-16T06:22:51.987 に答える