次の方法で、クラスタリングメソッドを関数として構築しようとしました。
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
それを行う正しい方法は何ですか?
使用する関数のヘルプを読んでください。 ?hclust
は、最初の引数d
が非類似度オブジェクトであり、行列ではないことを明確に示しています。
Arguments:
d: a dissimilarity structure as produced by ‘dist’.
OPが質問を更新したので、必要なのは
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
として、クラスタリングメソッドに渡すことができます。