У меня есть индексный список, содержащий несколько объектов, каждый из которых содержит 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)
проблема заключается в [[1: 100]], что вы используете в списке матриц, цикл будет я думаю: для (i в 1: 100) { lapply (genfreq [[i]] $ tab, function (x) t (x)) } ... но больше информации об ошибке, которую вы получите, будет добро пожаловать, чтобы иметь возможность ответить – jeborsel
@jebsel Ошибка, которую я получаю: Ошибка в genfreq [[1: 100]] $ tab: $ operator недопустим для atom vec TORs. Кроме того, ваше решение не вызывает ошибок, но в genfreqT ничего не происходит после запуска этого цикла. – cryptic0
Как насчет 'lapply (genfreq [1: 100], function (x) t (x $ tab))'? – r2evans