R 如何在hist中为分发的头和尾分配不同的存储箱大小?

R 如何在hist中为分发的头和尾分配不同的存储箱大小?,r,histogram,binning,custom-function,R,Histogram,Binning,Custom Function,我正在尝试创建一个直方图,在这个直方图中,我可以根据数据位于分布的头部还是尾部,为数据分配不同的存储单元大小 我试图创建以下函数my\u 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

我正在尝试创建一个直方图,在这个直方图中,我可以根据数据位于分布的头部还是尾部,为数据分配不同的存储单元大小

我试图创建以下函数
my\u 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, ....

x我相信你的想法太复杂了,你想要的是这个

my_f2 <- function(x) {
  c(seq(min(x), max(x[x < -500]), 5),
    seq(-500, 500, 1), 
    seq(min(x[x > 500]), max(x), 5), 
    max(x))
}

set.seed(666)
x <- rnorm(1000, 10, 275)
hist(x, my_f2)
my_f2 500]),最大值(x),5),
最大(x))
}
种子(666)

我相信你的想法太复杂了,你想要的就是这个

my_f2 <- function(x) {
  c(seq(min(x), max(x[x < -500]), 5),
    seq(-500, 500, 1), 
    seq(min(x[x > 500]), max(x), 5), 
    max(x))
}

set.seed(666)
x <- rnorm(1000, 10, 275)
hist(x, my_f2)
my_f2 500]),最大值(x),5),
最大(x))
}
种子(666)

非常感谢!这正是我想要的,正如你正确地提到的,我把一切都弄得比原来复杂得多。我真的很感激你的帮助help@EmanueleCitera很好,我很乐意帮忙。在这种情况下(和往常一样)请考虑。非常感谢!这正是我想要的,正如你正确地提到的,我把一切都弄得比原来复杂得多。我真的很感激你的帮助help@EmanueleCitera很好,我很乐意帮忙。在这种情况下(和往常一样)请考虑。