【发布时间】:2013-04-04 06:07:07
【问题描述】:
我尝试自动化我的功能来创建组。因此,我使用 classInt 包中的 classIntervalls 和 base 包中的 cut。我希望样式为“jenks”,默认情况下组大小为 10。如果少于 10 个unique 观察值,我希望组数是唯一观察值的数量。
所以这就是我尝试过的:
set.seed(45)
b=sample(1:50,10)
groupfunction<-function(data,my.style="jenks"){
ifelse(length(unique(data))<10,tmpbrk<-length(unique(data)),tmpbrk<-10)# tests if the number of unique values is bigger than 10
tmp<-classIntervals(data,tmpbrk,my.style,unique=T) #find the intervalls
tmp<-cut(data,tmp$brks,dig.lab=20,include.lowest = T) #cut the data by the breaks from the intervalls
tmp<-as.character(tmp) #turn results into characters to substitute unwanted characters
tmp<-gsubfn(".",list("["="",","="-",")"="","("=""," "="","]"=""),tmp) # substitute unwanted characters
}
groupfunction(b)
但我收到一条错误消息:cut.default(data, tmp$brks, dig.lab = 20, include.lowest = T) 中的错误:“breaks”不是唯一的。
我知道此错误消息的含义。但是谁能帮我实现这个功能并让它工作。我已经听说过cut2,但我不确定是否可以用 jenks 实现它。
【问题讨论】:
-
应该使用
if(.){.}else{.}。然后你只会得到一个不足为奇的警告,因为你的向量只有唯一的值。