首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中使用'hclust‘作为函数调用

如何在R中使用'hclust‘作为函数调用
EN

Stack Overflow用户
提问于 2013-12-03 13:14:15
回答 1查看 29.5K关注 0票数 18

我尝试通过以下方式将聚类方法构建为函数:

代码语言:javascript
复制
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)

但是为什么它会给出以下错误:

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

什么才是正确的方法呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-03 13:21:08

请务必阅读您所使用的函数的帮助。?hclust非常清楚第一个参数d是一个不同的对象,而不是一个矩阵:

代码语言:javascript
复制
Arguments:

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

更新

由于操作员现在已经更新了他们的问题,因此需要的是

代码语言:javascript
复制
hclustfunc <- function(x) hclust(x, method="complete")
distfunc <- function(x) as.dist((1-cor(t(x)))/2)
d <- distfunc(mydata)
fit <- hclustfunc(d)

原创

你想要的是

代码语言:javascript
复制
hclustfunc <- function(x, method = "complete", dmeth = "euclidean") {    
    hclust(dist(x, method = dmeth), method = method)
}

然后

代码语言:javascript
复制
fit <- hclustfunc(mydata)

按照预期工作。注意,您现在可以将相异系数方法作为dmeth和聚类方法传入。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20343398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档