首页 文章

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

提问于
浏览
0

我坚持用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 回答

  • 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 .

相关问题