【发布时间】:2018-04-18 03:21:56
【问题描述】:
我正在使用 for 循环在 R 中编写一个简单的函数。该函数采用数据集,在 for 循环中,它循环并为 kmeans 函数提供不同的集群数量值。代码如下:
s_kmeans <- function(fname){
wss = NULL
dataset <- read.csv(file=fname1,header = TRUE, sep = ",")
for(i in 2:10)
{
results <- kmeans(dataset,i)
wss[i] <- results$tot.withinss
}
x <- c(2:10)
df <- data.frame(x,wss)
g <- ggplot(df, aes(x))
g <- g+geom_line(aes(y=wss), color="red")
}
现在如果我运行这段代码会报错:
Error in data.frame(x, wss) :
arguments imply differing number of rows: 9, 10
实际上我想要从 2 到 10 的簇数的结果。我的理解是 for 循环运行 9 次,x 向量也有 9 个元素。我修改了如下代码:
s_kmeans <- function(fname){
wss = NULL
dataset <- read.csv(file=fname1,header = TRUE, sep = ",")
for(i in 2:10)
{
results <- kmeans(dataset,i)
wss[i] <- results$tot.withinss
}
x <- c(1:10)
print(wss)
print(x)
df <- data.frame(x,wss)
g <- ggplot(df, aes(x))
g <- g+geom_line(aes(y=wss), color="red")
}
现在它没有给出任何错误,而是将 NA 放入 wss 的第一个元素(wss 中的总共 10 个元素,对于循环运行 9 次应该是 9)向量和 x 向量。输出如下图:
[1] NA 1019.0836 864.0937 655.6397 506.3810 520.0426 374.2550 294.3192 330.9977 316.5263
[1] 1 2 3 4 5 6 7 8 9 10
我不知道发生了什么。任何人都可以请帮助。
【问题讨论】:
-
与错误无关,但是函数参数是
fname但是你在函数内部使用fname1? -
当
i == 2时,您将一个值分配给wss[2]- 这使得wss成为长度为2 且缺少第一个元素的向量。在您的第一个代码示例中,您可以改为分配给wss[i - 1] <- results$tot.withinss。