som结果对象的集群原型无法强制键入' double'

时间:2017-05-14 19:32:41

标签: r

我尝试更准确地遵循此tutorial代码:

groups = 3
iris.hc = cutree(hclust(dist(iris.som$codes)), groups)

# plot
plot(iris.som, type="codes", bgcol=rainbow(groups)[iris.hc])

#cluster boundaries
add.cluster.boundaries(iris.som, iris.hc)

然而,位:

dist(iris.som$codes)

给了我:

(list) object cannot be coerced to type 'double'

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

命令dist需要一个数字矩阵作为输入,但对象iris.som$codes是一个列表而不是一个矩阵:

str(iris.som$codes)

List of 1
 $ : num [1:25, 1:4] -1.353 -0.933 -0.523 0.321 0.569 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:25] "V1" "V2" "V3" "V4" ...
  .. ..$ : chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"

因此,您必须在代码中使用dist(iris.som$codes[[1]])

library("kohonen")
iris.sc = scale(iris[, 1:4])
iris.grid = somgrid(xdim = 5, ydim=5, topo="hexagonal")
iris.som = som(iris.sc, grid=iris.grid, rlen=100, alpha=c(0.05,0.01))

iris.hc = cutree(hclust(dist(iris.som$codes[[1]])), groups)

plot(iris.som, type="codes", bgcol=rainbow(groups)[iris.hc])
add.cluster.boundaries(iris.som, iris.hc)

enter image description here