不知道如何自动选择类型列表对象的比例。违约持续

时间:2018-05-31 17:02:13

标签: r list ggplot2

我一直在用ggplot绘制我的数据。我现在的外出是16个障碍物。 3个变量。我使用unlist使其成为不同的数据类型,但我仍然会出错。我的代码:

library(datasets)
data(iris)
cluster_data<-iris[-5]

calcss <- function(missingvar,kval) {
    cluster<-kmeans(cluster_data[-missingvar],kval,nstart=100)
    TotWithinSS<-cluster$tot.withinss
    return(TotWithinSS)
}
kvals=list()
sumsqs=list()
missvars=list()
for(k in 2:5){
    for(var in 1:4){
       kvals=rbind(kvals,k)
       sumsqs=rbind(sumsqs,calcss(var,k))
       missvars=rbind(missvars,var)
    }
}
out<-data.frame(kvals,missvars,sumsqs)
ggplot(data=out,aes(missvars,sumsqs,color=kvals))

错误说:

不知道如何自动选择类型列表对象的比例。违约持续。 不知道如何自动选择类型列表对象的比例。违约持续。 不知道如何自动选择类型列表对象的比例。默认为连续。

1 个答案:

答案 0 :(得分:1)

您无法将listggplot2一起使用。我们也不建议在for循环内扩展您的对象。如果您有更大的数据,它会变得非常慢。了解如何更有效地执行此操作herehere

因此,您应该在for循环前预先分配对象的大小repvector

library(datasets)
library(ggplot2)

data(iris)
cluster_data <- iris[-5]

calcss <- function(missingvar, kval) {
  cluster <- kmeans(cluster_data[-missingvar], kval, nstart = 100)
  TotWithinSS <- cluster$tot.withinss
  return(TotWithinSS)
}

kvals = rep(NA, 16) # or use kvals = vector("numeric", 16L)
sumsqs = rep(NA, 16)
missvars = rep(NA, 16)

for(k in 2:5) {
  for(var in 1:4) {
    kvals = rbind(kvals, k)
    sumsqs = rbind(sumsqs, calcss(var, k))
    missvars = rbind(missvars, var)
  }
}

out <- data.frame(kvals, missvars, sumsqs)

ggplot(data = out, aes(missvars, sumsqs, color = kvals)) +
  geom_point()

reprex package(v0.2.0)创建于2018-05-31。