Как использовать «hclust» в качестве вызова функции в R

Я попытался построить метод кластеризации как функцию следующими способами:

mydata <- mtcars

# Here I construct hclust as a function
hclustfunc <- function(x) hclust(as.matrix(x),method="complete")

# Define distance metric
distfunc <- function(x) as.dist((1-cor(t(x)))/2)

# Obtain distance
d <- distfunc(mydata)

# Call that hclust function
fit<-hclustfunc(d)

# Later I'd do
# plot(fit)

Но почему он выдает следующую ошибку:

Error in if (is.na(n) || n > 65536L) stop("size cannot be NA nor exceed 65536") : 
  missing value where TRUE/FALSE needed

Как правильно это сделать?


person neversaint    schedule 03.12.2013    source источник


Ответы (1)


Прочтите справку по функциям, которые вы используете. ?hclust довольно ясно, что первый аргумент d является объектом несходства, а не матрицей:

Arguments:

       d: a dissimilarity structure as produced by ‘dist’.

Обновлять

Поскольку ОП теперь обновил свой вопрос, что нужно, так это

hclustfunc <- function(x) hclust(x, method="complete")
distfunc <- function(x) as.dist((1-cor(t(x)))/2)
d <- distfunc(mydata)
fit <- hclustfunc(d)

Оригинал

То, что вы хотите, это

hclustfunc <- function(x, method = "complete", dmeth = "euclidean") {    
    hclust(dist(x, method = dmeth), method = method)
}

а потом

fit <- hclustfunc(mydata)

работает как положено. Обратите внимание, что теперь вы можете передать метод коэффициента несходства как dmeth и метод кластеризации.

person Gavin Simpson    schedule 03.12.2013