如何解决如何为hist的分布的头和尾分配不同的bin大小?
我正在尝试创建一个直方图,可以根据它们位于分布的头部还是尾部来为数据分配不同的bin大小。
我试图创建以下函数my_f
用作自变量breaks=
的输入,但是它不起作用。这是我的代码,以及我得到的错误。
x <- rnorm(1000,10,275)
my_f <- function(x){
loc <- list(x[x < -500],x[x >= -500 & x <= 500],x[x > 500])
dx <- c(5,1,5)
breaks <- sapply(1:length(x),function(i) if(x[i] %in% loc[[1]])
{seq(min(loc[[1]]),max(loc[[1]])+dx[1],dx[1])} else
if(x[i] %in% loc[[2]]){seq(min(loc[[2]]),max(loc[[2]])+dx[2],dx[2])} else
{seq(min(loc[[3]]),max(loc[[3]])+dx[3],dx[3])})
return(breaks)
}
h <- hist(x,breaks = my_f)
Error in hist.default(x,breaks = my_f,plot = F) :
c("Invalid breakpoints produced by 'breaks(x)': 200.1702,210.1702,....
我也尝试了不使用sapply
函数的情况,但是我什么都没得到。关于如何解决/解决此问题的任何建议?
解决方法
我相信您在想的太复杂了,这就是您想要的。
my_f2 <- function(x) {
c(seq(min(x),max(x[x < -500]),5),seq(-500,500,1),seq(min(x[x > 500]),max(x),max(x))
}
set.seed(666)
x <- rnorm(1000,10,275)
hist(x,my_f2)
但是请注意,最后一个bin有点动态,因为max(x)
没有有效地包含在seq(min(x[x > 500]),5)
中,因此我们必须额外添加它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。