2015-03-30 2 views
-2

У меня есть индексный список, содержащий несколько объектов, каждый из которых содержит 3 матрицы ($ tab, $ nobs и $ other). В списке есть сотни таких объектов. Цель состоит в том, чтобы получить доступ только к матрице $ tab и перенести ее с каждого из объектов.Извлечение компонента из всех объектов в индексированном списке

genfreqT <- lapply(genfreq[[1:100]]$tab, function(x) t(x)) 

Это не работает.

Вот как структурирован объект genfreq. Это было создано с помощью R-пакета adegenet.

> str(genfreq[[1]]) 
List of 3 
$ tab : num [1:30, 1:1974] 0.6 0.5 0.325 0.675 0.6 0.5 0.5 0.375 0.55 0.475 ... 
    ..- attr(*, "dimnames")=List of 2 
    .. ..$ : Named chr [1:30] "1" "2" "3" "4" ... 
    .. .. ..- attr(*, "names")= chr [1:30] "01" "02" "03" "04" ... 
    .. ..$ : chr [1:1974] "L0001.1" "L0001.2" "L0002.1" "L0002.2" ... 
$ nobs: num [1:30, 1:1000] 40 40 40 40 40 40 40 40 40 40 ... 
    ..- attr(*, "dimnames")=List of 2 
    .. ..$ : Named chr [1:30] "1" "2" "3" "4" ... 
    .. .. ..- attr(*, "names")= chr [1:30] "01" "02" "03" "04" ... 
    .. ..$ : Named chr [1:1000] "L0001" "L0002" "L0003" "L0004" ... 
    .. .. ..- attr(*, "names")= chr [1:1000] "L0001" "L0002" "L0003" "L0004" ... 
$ call: language makefreq(x = x, truenames = TRUE) 
+0

проблема заключается в [[1: 100]], что вы используете в списке матриц, цикл будет я думаю: для (i в 1: 100) { lapply (genfreq [[i]] $ tab, function (x) t (x)) } ... но больше информации об ошибке, которую вы получите, будет добро пожаловать, чтобы иметь возможность ответить – jeborsel

+0

@jebsel Ошибка, которую я получаю: Ошибка в genfreq [[1: 100]] $ tab: $ operator недопустим для atom vec TORs. Кроме того, ваше решение не вызывает ошибок, но в genfreqT ничего не происходит после запуска этого цикла. – cryptic0

+0

Как насчет 'lapply (genfreq [1: 100], function (x) t (x $ tab))'? – r2evans

ответ

2
genfreqT <-lapply(lapply(genfreq, "[[", "tab"),function(x) t(x)) 
+0

Да, сэр! Это работает. Можете ли вы объяснить, что делает внутренняя операция? – cryptic0

+0

lapply (genfreq, "[[", "tab") заключается в извлечении всех матриц (функция [[) с именем "tab" в списке – jeborsel

0

Разработчик пакет 'Adegenet' условии, что это решение:

> genfreqT <- lapply(genfreq, function(e) t(e$tab)) 

> summary(genfreqT) 
        Length Class Mode 
data1.str 59220 -none- numeric 
data2.str 59220 -none- numeric 
data3.str 59220 -none- numeric 
Смежные вопросы