【发布时间】:2014-09-13 21:30:50
【问题描述】:
我认为我从矩阵中错误地访问和分配变量。我知道数组、矩阵和表在 R 中是不同的。我想要结束的是一个名为“c”的值数组,它有一个 1 或 2,将输入中的元素分配给 Mew(number 1) 或Mewtwo(编号 2。我还想要从 Mew 到名为 dMew 的数组中的所有其他点的距离以及 dMewtwo 从 Mewtwo 到输入中所有其他元素的距离的数组。我最终得到的是 NA_real_ 对于所有变量,除了输入。有很多关于访问 R 中各种数据结构的行或列的重要信息,但我对访问单个元素感兴趣。任何建议都会很有帮助。如果之前已经回答过,我很抱歉,但我不能在任何地方都可以找到它。
#Read input from a csv data file
input = read.csv("~/Desktop/Engineering/iris.csv",head=FALSE)
input = input[c(0:3)]
input = as.matrix(input)
#set random centroids
Mew = input[1,1]
Mewtwo = input[nrow(input),ncol(input)]
#Determine Distance
dist <- function(x, y) {
return(sqrt((x - y)^2))
}
#Determine the clusters
dMew = matrix(,nrow(input), ncol(input))
dMewtwo = matrix(,nrow(input), ncol(input))
c = matrix(,nrow(input), ncol(input))
for (i in 1:nrow(input)) {
for (j in 1:ncol(input)) {
dMew[i,j] = dist(Mew, input[i,j])
dMewtwo[i,j] = dist(Mewtwo, input[i,j])
if (dMew[i,j] > dMewtwo[i,j]) {
c[i,j] = 2
} else {
c[i,j] = 1
}
}
}
#Update the centroids
Mew = mean(dMew)
Mewtwo = mean(dMewtwo)
【问题讨论】:
-
您的
for循环仅迭代nrow(input)和ncol(input)而不是1:nrow(input)和1:ncol(input)。尝试使您的代码可重现并将其减少为主要问题,例如,我们无权访问您的数据源。 -
是的,我发帖后注意到了。
-
您的
dist函数返回x - y,因为您忘记使用sum。你能提供一些数据来处理吗?