【问题标题】:Loop to simulate hierarchical clustering R循环模拟层次聚类 R
【发布时间】:2018-07-25 20:15:17
【问题描述】:

我使用Vectorize 函数为 50x50 数据集的 Kolmogorov Smirnov 测试创建了一个循环,并使其输出 50x50 矩阵中的 p 值。然后将这些 p 值存储为距离对象。应用层次聚类并将其存储为树状图对象。我再次重复这一点,然后找到它们之间的共同相关性。下面的代码输出一个 2x2 矩阵。

mat1 <- outer(1:50, 1:50, Vectorize(function(i,j)
          {ks.boot(as.numeric(rep(seq(0,14,1),as.vector(data[i,]))),
                   as.numeric(rep(seq(0,14,1),as.vector(data[j,]))),nboots=100)                   
                   $ks.boot.pvalue}))
rownames(mat) <- data2[, 1]
d1=as.dist(as.matrix(1-mat))
hcr1 <- hclust(d,method = "complete")
dend1 <- as.dendrogram(hcr)

mat2 <- outer(1:50, 1:50, Vectorize(function(i,j)
          {ks.boot(as.numeric(rep(seq(0,14,1),as.vector(data[i,]))),
                   as.numeric(rep(seq(0,14,1),as.vector(data[j,]))),nboots=100)                   
                   $ks.boot.pvalue}))
rownames(mat) <- data2[, 1]
d2=as.dist(as.matrix(1-mat))
hcr2 <- hclust(d,method = "complete")
dend2 <- as.dendrogram(hcr)

dendy <- dendlist(dend1,dend2)
cor <- cor.dendlist(dendy1)
cor1

所以我所追求的是一个for循环来模拟以获得dend1,dend2,....,dend100。将其存储到

dendy <- dendlist(dend1,dend2,...,dend100)

【问题讨论】:

  • 您能具体说明您的问题吗?
  • 我通过复制和粘贴相同的代码但更改了变量名称重复了该过程一次。即 mat1 & mat2, d1 & d2。而不是复制这 100 次 mat1,mat2,.....,mat100 我想把它放到一个循环中,计算 p 值 100 次,然后使用我所说的过程,最后输出一个 100x100 的 cophenetic 矩阵每个模拟之间的相关性
  • 你只是想重复这个过程一百次,不改变代码中的任何内容?
  • 是的,我对 R 中的循环还很陌生

标签: r loops hierarchical-clustering


【解决方案1】:

如果你只想要一个包含 100 个dend 的列表,请将相关代码包装在一个不带参数的自定义函数中,然后 lapply 它 100 次:

FOO <- function(...){
  mat1 <- outer(1:50, 1:50, Vectorize(function(i,j)
  {ks.boot(as.numeric(rep(seq(0,14,1),as.vector(data[i,]))),
           as.numeric(rep(seq(0,14,1),as.vector(data[j,]))),nboots=100)                   
    $ks.boot.pvalue}))
  rownames(mat) <- data2[, 1]
  d1=as.dist(as.matrix(1-mat))
  hcr <- hclust(d,method = "complete")
  as.dendrogram(hcr)
}

dendy <- lapply(1:100, FOO)

【讨论】:

  • 运行 dendy 时出现此错误:rep(seq(0, 14, 1), as.vector(test[i, ])) 中的错误:'times' 参数无效
  • 得到它的工作,需要纠正的简单错误。谢谢!
猜你喜欢
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 2014-06-28
  • 2013-05-08
  • 2021-02-04
  • 1970-01-01
  • 2018-10-22
相关资源
最近更新 更多