Как напрямую выбрать один и тот же столбец из всех вложенных списков в списке?

можно ли напрямую выбрать столбец всех вложенных списков в списке?
Мой список создается с помощью aggregate () с таблицей ():

AgN=aggregate(data,by=list(d$date),FUN=table,useNA="no") 

AgN$x выглядит так:

 $`0` 1 2 3 9 11 0.447204969 0.438509317 0.096894410 0.009937888 0.007453416 $`1` 1 2 4 8 11 0.489974937 0.389724311 0.102756892 0.006265664 0.011278195 … $n 

Я хочу получить вектор определенного столбца каждой таблицы, например вектор, содержащий значения всех столбцов с именем «1». Я все еще новичок R, но даже после долгого поиска и поиска не нашел ничего хорошего. Если я хочу получить поле списка, я могу просто индексировать его с помощью скобок, например [i, j].
В Интернете я нашел несколько примеров для матриц, поэтому я попытался сделать то же самое, сначала только выбрав один столбец вложенного списка с помощью AgN$x[1][1] , но он все еще выбирает целый список:

$ 0

  1 2 3 8 11 

0,447204969 0,438509317 0.096894410 0,009937888 0,007453416

Моя следующая попытка была AgN$x[[1]][1] , и она работала:

  1 

0.447205

Поэтому я попытался сделать то же самое, чтобы выбрать значение каждого первого столбца всех вложенных списков:

 AgN$x[[1:length(AgN$x]][1] Recursive indexing failed at level 2 

По-видимому, проблема заключается в том, что запрещается выбирать диапазон, если вы используете двойные скобки.

Моя последняя попытка заключалась в использовании цикла for:

 cduR=NULL for (i in 1:length(AgN$x)){ t=AgN$x[[i]] cduR=c(cduR,as.vector(t["1"])) } , cduR=NULL for (i in 1:length(AgN$x)){ t=AgN$x[[i]] cduR=c(cduR,as.vector(t["1"])) } 

Наконец, пока это работает. Но таким образом мне приходилось создавать цикл каждый раз, когда я хочу выбирать столбцы. Нет ли прямого пути?

Спасибо за вашу помощь.

Предполагая, что у вас есть что-то вроде следующего:

 myList <- list(`0` = c(`1` = 10, `2` = 20, `3` = 30, `4` = 72), `1` = c(`1` = 15, `2` = 9, `3` = 7)) myList # $`0` # 1 2 3 4 # 10 20 30 72 # # $`1` # 1 2 3 # 15 9 7 

Используйте sapply() или lapply() чтобы войти в ваш список и извлечь все lapply() столбцы. Некоторые примеры.

 # As a list of one-column data.frames lapply(myList, `[`, 1) # $`0` # 1 # 10 # # $`1` # 1 # 15 # As a list of vectors lapply(myList, `[[`, 1) # $`0` # [1] 10 # # $`1` # [1] 15 # As a named vector sapply(myList, `[[`, 1) # 0 1 # 10 15 # As an unnamed vector unname(sapply(myList, `[[`, 1)) # [1] 10 15 

Другие варианты синтаксиса, которые также include вас, include:

 ## Same output as above, different syntax lapply(myList, function(x) x[1]) lapply(myList, function(x) x[[1]]) sapply(myList, function(x) x[[1]]) unname(sapply(myList, function(x) x[[1]])) 

Пример вложенного списка

Если у вас есть вложенные списки (списки в списках), попробуйте следующие варианты.

 # An example nested list myNestedList <- list(A = list(`0` = c(`1` = 10, `2` = 20, `3` = 30, `4` = 72), `1` = c(`1` = 15, `2` = 9, `3` = 7)), B = list(`0` = c(A = 11, B = 12, C = 13), `1` = c(X = 14, Y = 15, Z = 16))) # Run the following and see what you come up with.... lapply(unlist(myNestedList, recursive = FALSE), `[`, 1) lapply(unlist(myNestedList, recursive = FALSE), `[[`, 1) sapply(unlist(myNestedList, recursive = FALSE), `[[`, 1) rapply(myNestedList, f=`[[`, ...=1, how="unlist") 

Обратите внимание, что для lapply() и sapply() вам нужно использовать unlist(..., recursive = FALSE) а для rapply() (рекурсивное применение) вы напрямую ссылаетесь на список.

Один из примеров, о котором я не думаю, явно указан, но также работает, если у вас есть список data.frames, matrix, xts, zoo и т. Д. С именами строк и столбцов, вы можете впоследствии вернуть целую строку, столбец или коллекцию с помощью следующий синтаксис:

Список с объектами формата:

  0% 1% 10% 50% 90% 99% 100% Sec.1 -0.0005259283 -0.0002644018 -0.0001320010 -0.00005253342 0.00007852480 0.0002375756 0.0007870917 Sec.2 -0.0006620675 -0.0003931340 -0.0001588773 -0.00005251963 0.00007965378 0.0002121163 0.0004190017 Sec.4 -0.0006091183 -0.0003994136 -0.0001859032 -0.00005230263 0.00010592379 0.0003165986 0.0007870917 Sec.8 -0.0007679577 -0.0005321807 -0.0002636040 -0.00005232452 0.00014492480 0.0003930241 0.0007870917 Sec.16 -0.0009055318 -0.0007448356 -0.0003449334 -0.00005290166 0.00021238287 0.0004772207 0.0007870917 Sec.32 -0.0013007873 -0.0009552231 -0.0005243472 -0.00007836480 0.00028928104 0.0007382848 0.0013002350 Sec.64 -0.0016409500 -0.0012383696 -0.0006617173 -0.00005280668 0.00042354939 0.0011721508 0.0018579966 Sec.128 -0.0022575471 -0.0018858823 -0.0008466965 -0.00005298436 0.00068616576 0.0014665900 0.0027616991 

Код (обратите внимание на пустой индекс первой строки, указав все строки)

 simplify2array(lapply(listOfIdenticalObjects,`[`,,"50%")) 

Вывод

  ListItem1 ListItem2 ListItem3 ListItem4 ListItem5 Sec.1 -0.00005253342 -0.00004673443 -0.0001112780 -0.00001870960 -0.00002051009 Sec.2 -0.00005251963 -0.00004663200 -0.0001112904 -0.00001878075 0.00000000000 Sec.4 -0.00005230263 -0.00004669297 -0.0001112780 -0.00001869911 -0.00002034403 Sec.8 -0.00005232452 -0.00004663635 -0.0001111296 -0.00001926096 0.00000000000 Sec.16 -0.00005290166 -0.00004668207 -0.0001109570 0.00000000000 0.00000000000 Sec.32 -0.00007836480 0.00000000000 -0.0001111667 -0.00001894496 0.00000000000 Sec.64 -0.00005280668 0.00000000000 -0.0001110926 -0.00001878305 0.00000000000 Sec.128 -0.00005298436 0.00004675191 0.0000000000 -0.00005582568 0.00001020502 
Давайте будем гением компьютера.