输入文件是
Mydata <- read.table(con <- textConnection('
gene treatment1 treatment2 treatment3
aaa 1 0 1
bbb 1 1 1
ccc 0 0 0
eee 0 1 0
'), header=TRUE)
close(con)
Mydata是
gene treatment1 treatment2 treatment3
1 aaa 1 0 1
2 bbb 1 1 1
3 ccc 0 0 0
4 eee 0 1 0
为了构建集群,我已经完成了
d <- dist(mydata, method = "euclidean")
fit <- hclust(d, method="ward")
plot(fit)
我根据“欧几里德”距离得到了集群。
在我之前的stackoverflow消息中 How to use R to compute Tanimoto/Jacquard Score as distance matrix
我发现我也可以用R来计算tanimoto-jacquard距离矩阵。你能不能教我如何将tanimoto-jacquard与前面的步骤结合起来得到一个基于tanimoto-jacquard距离而不是euclidean计算的距离矩阵的聚类?非常感谢。
答案 0 :(得分:5)
你有什么不明白的? ?vegdist
告诉我们它会返回类"dist"
的对象,因此您只需删除dist(....)
行并将其替换为一个调用vegdist(....)
。例如:
require(vegan)
d <- vegdist(Mydata[, -1], method = "jaccard")
fit <- hclust(d, method="ward")
plot(fit)
您需要删除第一列(并且应该在您在Q中显示的欧几里德版本中完成),因为这不是应该用于形成相异矩阵的数据。
这会产生警告:
Warning message:
In vegdist(Mydata[, -1], method = "jaccard") :
you have empty rows: their dissimilarities may be meaningless in method jaccard
因为第3行不包含形成它与其他样本之间的jaccard距离的信息。您可能想要考虑在这种情况下jaccard是否最合适。
OP现在希望基因标签为行名。最简单的选择是在使用row.names
的{{1}}参数读取数据时告诉R这个:
read.table()
,并提供:
mydata2 <- read.table(con <- textConnection("gene treatment1 treatment2 treatment3
aaa 1 0 1
bbb 1 1 1
ccc 0 0 0
eee 0 1 0
"), header = TRUE, row.names = 1)
close(con)
或者,如果数据已经在R中并且重新加载和重做以前的计算很痛苦,只需将> mydata2
treatment1 treatment2 treatment3
aaa 1 0 1
bbb 1 1 1
ccc 0 0 0
eee 0 1 0
列分配给行名称并删除gene
列(使用原始{ {1}}):
gene
,并提供:
mydata