示例数据:
set.seed(1234)
a <- matrix(rnorm(250),nrow=25,ncol=10)
fac <- as.factor(c(rep("A",8),rep("B",10),rep("C",7)))
a.dist <- dist(a, "euclidian")
boxplot(a.dist ~ fac)
当我尝试运行boxplot(a.dist ~ fac)
时,出现以下错误:
Error in model.frame.default(formula = a.dist ~ fac) :
variable lengths differ (found for 'fac')
我试图通过以下方式解决此问题
a.dist <- as.matrix(a.dist)
a.dist[upper.tri(a.dist)] <- NA
但是随后boxplot
给了我一个有趣的情节。
我可以用
绘制特定组的组内欧氏距离subset <- as.factor(fac) %in% ("A")
a.dist.A <- a.dist[subset]
boxplot(a.dist.A)
基本上,我需要针对每个因子水平执行此操作,然后将这些箱形图合并为一个。有一个简单的方法吗?
答案 0 :(得分:2)
set.seed(1234)
a <- matrix(rnorm(250),nrow=25,ncol=10)
fac <- as.factor(c(rep("A",8),rep("B",10),rep("C",7)))
a_grp <- split.data.frame(a, fac) ## split matrix by group
d_grp <- lapply(a_grp, dist) ## apply `dist` by group
n_grp <- lengths(d_grp) ## number of pairs by group
d <- unlist(d_grp) ## combine
g <- rep(factor(levels(fac), levels = levels(fac)), n_grp) ## combine
boxplot(d ~ g) ## joint plot
因为您不希望组间距离,所以必须按组应用dist
。