2016-07-05 5 views
0

У меня есть кадр данных, который я разделил на разные подмножества. На основании этого я генерирую списки последовательностей и матрицы расстояний , а затем иерархический кластерный анализ.недопустимый индекс типа 'list' с lapply в 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() сэкономит мне много времени. Какие-либо предложения?

+0

Добро пожаловать в SO !, без тестовых данных, невозможно воспроизвести ошибку, я бы предложил посмотреть [как опубликовать воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how -to-make-a-great-r-воспроизводимый пример) и добавление некоторых тестовых данных – OdeToMyFiddle

ответ

0

В течение последних 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)}) 
} 

Не проверено, поскольку у нас нет данных (см. Комментарий).

+0

Я изменил mvad.tree [[name]] на mvad.hc [[name]], и это работает. Спасибо за помощь Эрик! – xanbono

+0

Код обновлен с учетом вашего комментария. –