WeightedCluster 中 lapply 的无效下标类型 'list'

invalid subscript type 'list' with lapply in WeightedCluster

我有一个数据框,我将其分成不同的子集。基于此,我生成序列列表和 距离矩阵,然后进行层次聚类分析。

library(TraMineR)
library(WeightedCluster)
library(cluster)

data(mvad)
value1 <- min(grep('\d{2}$', names(mvad)))
value2 <- max(grep('\d{2}$', names(mvad)))
mvad.split <-  split(mvad, f=mvad$male)



mvad.seq   <-  lapply(mvad.split,  function(x){seqdef(x[value1:value2])})
mvad.om    <-  lapply(mvad.seq,    function(x){seqdist(x, method='OM',
                                               indel=1, sm='TRATE')})
mvad.dis   <-  lapply(mvad.om,     function(x){as.dist(x)})
mvad.hc    <-  lapply(mvad.dis,    function(x){hclust(x,
                                               method='ward.D2')})

然后我想将我的层次聚类列表转换为带有序列数据和距离的 seqtree 列表

mvad.tree  <-  lapply(mvad.hc,     function(x){as.seqtree(x,
                                                     seqdata=mvad.seq[[x]],
                                                     diss=mvad.dis[[x]],
                                                     weighted=F,
                                                     nclust=6)})

并得到Error in mvad.dis[[x]] : invalid subscript type 'list'。 我的实际数据由许多队列组成,将 split() 与 lapply() 结合使用会节省我很多时间。有什么建议吗?

在最后一个 lapply 中,每个元素都来自 mvad.hc 中的一个节点,因此是 hclust 对象。您不想 lapply 在此列表上,而是在名称列表上并获取相应的对象。类似于:

mvad.tree <- lapply(as.list(names(mvad.hc)), FUN=function(name){
  as.seqtree(mvad.hc[[name]],seqdata=mvad.seq[[name]],
  diss=mvad.dis[[name]],weighted=F,nclust=6)})
}

没有测试,因为我们没有数据(参见评论)。