我一直在用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))
错误说:
不知道如何自动选择类型列表对象的比例。违约持续。 不知道如何自动选择类型列表对象的比例。违约持续。 不知道如何自动选择类型列表对象的比例。默认为连续。
答案 0 :(得分:1)
您无法将list
与ggplot2
一起使用。我们也不建议在for
循环内扩展您的对象。如果您有更大的数据,它会变得非常慢。了解如何更有效地执行此操作here和here
因此,您应该在for
循环前预先分配对象的大小rep
或vector
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。