Ja Müller
2020-Aug-24 13:06 UTC
[R] How to write an interface function for bootstrapping with clusterboot() in R?
Dear all, I am trying to write an interface function (CBI function) in order to use the bootstrapping function clusterboot() together with the clustering algorithm kmodes(). See here: https://www.rdocumentation.org/packages/fpc/versions/2.2-7/topics/clusterboot kmodes function | R Documentation Has anyone already written interface functions for clusterboot() and can assist me or send me some example code for other interface functions for clusterboot()? Please find my code below: - I use the built-in dataset USArrests for the purpose of this minimal reproducible code only, which yields the same error message as when I use my actual data set. - mykmodesCBI = The name of the interface function I wish to create. - kmodes_boot10 = The result of the clusterboot() function using the interface function mykmodesCBI - I am getting the error message 'Error in matrix(0, nrow = c1$nc, ncol = B) :non-numeric matrix extent' I have not found any assistance online so far, this is why I now turn to the R-help mailing list. Thank you in advance, any help is much appreciated!Julia #--------------------------------------------------------------beginning of code snippet------------------------------------------------------------------------ library("fpc") library("cluster") data(USArrests) mydata_example <- USArrests %>% na.omit() %>% scale() mykmodesCBI <- function(data, k) { result = kmodes(data, modes=k, iter.max = 50, weighted = FALSE ); nc = n_distinct( kmodes(data, modes=k, iter.max = 50, weighted = FALSE )$cluster ) ; clusterlist= list( as.vector(lapply( kmodes(data, modes=1, iter.max = 50, weighted = FALSE )$cluster,function(x) if(x==1) {TRUE} else {FALSE} )), as.vector(lapply( kmodes(data, modes=2, iter.max = 50, weighted = FALSE )$cluster,function(x) if(x==2) {TRUE} else {FALSE} )), as.vector(lapply( kmodes(data, modes=3, iter.max = 50, weighted = FALSE )$cluster,function(x) if(x==3) {TRUE} else {FALSE} )), as.vector(lapply( kmodes(data, modes=4, iter.max = 50, weighted = FALSE )$cluster,function(x) if(x==5) {TRUE} else {FALSE} )), as.vector(lapply( kmodes(data, modes=5, iter.max = 50, weighted = FALSE )$cluster,function(x) if(x==5) {TRUE} else {FALSE} )), as.vector(lapply( kmodes(data, modes=6, iter.max = 50, weighted = FALSE )$cluster,function(x) if(x==6) {TRUE} else {FALSE} )) ) partition = as.vector(list( kmodes(data, modes=k, iter.max = 50, weighted = FALSE )$cluster )); clustermethod = "kmodes"; return( list( result, nc, clusterlist, partition, clustermethod ) ) } kmodes_boot10 <- clusterboot( data=mydata_example, B = 10, distances=FALSE, bootmethod = "boot", multipleboot = FALSE, clustermethod = mykmodesCBI, k = 6, seed = 123, datatomatrix=TRUE) kmodes_boot10#--------------------------------------------------------------end of code snippet------------------------------------------------------------------------ [[alternative HTML version deleted]]