不知道如何为列表类型的对象自动选择比例。(Don't know how to automatically pick scale for object of type list. Defaul

编程入门 行业动态 更新时间:2024-10-27 21:21:47
不知道如何为列表类型的对象自动选择比例。(Don't know how to automatically pick scale for object of type list. Defaulting to continuous)

我一直在用ggplot绘制数据。 我现在的出场是16 obs。 的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))

错误说:

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

I'm stuck on plotting my data with ggplot. The outpit I have now is 16 obs. of 3 variables. I used unlist to make it a different data type but I still get errors to plot. My code:

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))

The error says:

Don't know how to automatically pick scale for object of type list. Defaulting to continuous. Don't know how to automatically pick scale for object of type list. Defaulting to continuous. Don't know how to automatically pick scale for object of type list. Defaulting to continuous.

最满意答案

你不能在ggplot2使用list 。 也不建议在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()
 

由decex软件包创建于2018-05-31(v0.2.0)。

You can't use list with ggplot2. It's also not recommended to grow your objects within for loop. It can get very slow if you have bigger data. See how to do it more efficiently here and here

So you should pre-allocate the size of your objects before for loop with either rep or 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()
 

Created on 2018-05-31 by the reprex package (v0.2.0).

更多推荐

本文发布于:2023-07-26 05:08:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1271332.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:何为   比例   对象   类型   列表

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!