2

現在、私は knnMCN() を使用しようとしています

こんな形でやってるのに…

knnMCN(data, classification, data2, K=1, ShowObs=T)

ファイル data、classification、および data2 はすべて .csv ファイルです。「data」はトレーニング データ、「classification」は分類 (0、1、または 2 として分類) の単一列ファイルで、data2 は分類するデータセットです。

これらのファイルには数値のみがあります。このコマンドを実行するたびに、エラーが発生します。

Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?

ここで何がうまくいかないのか知っている人はいますか?K-Nearest Neighborsを行うためのより良い/異なる方法はありますか?

編集:これらは dput(head(data/classification/data2)) の結果です

データ:

structure(list(down = c(1L, 2L, 3L, 1L, 2L, 1L), yards_to_first = c(10L, 
7L, 7L, 10L, 7L, 10L), yards_to_endzone = c(84L, 81L, 81L, 73L, 
70L, 40L), score_difference = c(0L, 0L, 0L, 0L, 0L, 0L), quarter = c(1L, 
1L, 1L, 1L, 1L, 1L), seconds_remaining = c(3595L, 3560L, 3554L, 
3523L, 3476L, 3450L)), .Names = c("down", "yards_to_first", "yards_to_endzone", 
"score_difference", "quarter", "seconds_remaining"), row.names = c(NA, 
6L), class = "data.frame")

分類:

structure(list(play_type = c(0L, 1L, 1L, 0L, 1L, 1L)), .Names = "play_type",
row.names = c(NA,6L), class = "data.frame")

データ2:

structure(list(down = c(1L, 2L, 3L, 4L, 1L, 2L), yards_to_first = c(10L, 
5L, 8L, 8L, 10L, 10L), yards_to_endzone = c(58L, 53L, 56L, 56L, 
98L, 98L), score_difference = c(0L, 0L, 0L, 0L, 0L, 0L), quarter = c(1L, 
1L, 1L, 1L, 1L, 1L), seconds_remaining = c(3593L, 3556L, 3515L, 
3507L, 3496L, 3460L)), .Names = c("down", "yards_to_first", "yards_to_endzone", 
"score_difference", "quarter", "seconds_remaining"), row.names = c(NA, 
6L), class = "data.frame")
4

1 に答える 1

4

分類を 1 列のデータ フレームとしてではなく、ベクトルとして渡します。

knnMCN(data, classification$play_type, data2, K=1, ShowObs=T)

説明: のドキュメントでknnMCNは、分類は「行列またはデータ フレーム」である必要があると記載されていますが、関数のコードが分類をベクトルとして処理しようとするため、これは誤りのようです。エラーをスローする行は次のとおりです。

OrigTrnG = as.factor(OrigTrnG)

as.factorデータフレームでは使用できないため。

于 2013-04-24T19:04:20.013 に答える