【问题标题】:Accessing dataframe column causes Error in sort.list(y) : 'x' must be atomic for 'sort.list' [duplicate]访问数据框列会导致 sort.list(y) 中的错误:对于“sort.list”,“x”必须是原子的 [重复]
【发布时间】:2013-04-24 18:50:00
【问题描述】:

目前我正在尝试使用 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")

【问题讨论】:

  • 您的意思是您正在传递dataclassificationdata2 的csv 文件的名称,还是将它们读入数据帧?如果它们是数据框(它们应该是),你能显示dput(head(data))dput(head(classification))dput(head(data2)) 的输出吗?
  • 我会将其包含在编辑中
  • 好的,我已经包含了输出

标签: r vector indexing dataframe


【解决方案1】:

将分类作为向量而不是作为具有一列的数据框传递:

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

解释:虽然knnMCN 的文档说分类应该是“矩阵或数据框”,但这似乎是错误的,因为函数的代码试图将分类视为向量。引发错误的行是:

OrigTrnG = as.factor(OrigTrnG)

因为as.factor 不能用于数据框。

【讨论】:

    猜你喜欢
    • 2018-01-28
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 2013-01-24
    • 2020-04-22
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    相关资源
    最近更新 更多