Как выбрать элементы из каждого вектора списка в R - PullRequest
1 голос
/ 21 сентября 2011

Я хотел бы выбрать третий элемент из каждого вектора в списке ниже. Я пытался таким образом, но у меня возникли проблемы на уровне 2. Я нашел функцию select.list (), но я не знаю, как ее применить. Какие-либо предложения? Большое спасибо.

newlist =  x[[1:140]][3]
List of 140
chr(0)
chr [1:7] Brachy leaf N11428394 1 
chr [1:7] Brachy leaf N10508942 141 
chr(0) 
chr [1:7] Brachy leaf N35663 5 
chr [1:7] Brachy leaf N12458414 1 
chr [1:7] Brachy leaf N5242558 16 
chr [1:7] Brachy leaf N7738408 1 
chr [1:10] Brachy leaf N9826491 633 

Ответы [ 2 ]

6 голосов
/ 21 сентября 2011

Если я понимаю код, который вы показываете, и x - это список, который вы хотите выбрать из , то это будет работать:

lapply(x, FUN = `[`, 3)

Объяснение:

lapply() берет каждый компонент предоставленного списка и применяет к нему функцию.Фактически он извлекает x[[1]] и применяет к нему FUN, затем извлекает x[[2]] и применяет к нему FUN и так далее.Так что позаботится об этой части вашего кода: x[[1:140]].Вам просто нужно сделать экстракт из 3-х элементов, как применено FUN.`[` на самом деле является функцией в R, поэтому мы можем использовать ее как FUN.Это должно быть указано как специальное имя.Последняя часть заключается в предоставлении аргументов для `[`(), что мы делаем здесь, используя неназванный аргумент (3 в показанном вызове функции).

Пример:

> x <- list(A = letters[1:7], B = letters[1:7], C = letters[1:7])
> (newlist <- lapply(x, `[`, 3))
$A
[1] "c"

$B
[1] "c"

$C
[1] "c"

> 
> ## or as a vector (not a list) result
> (newlist2 <- sapply(x, `[`, 3))
  A   B   C 
"c" "c" "c"
5 голосов
/ 21 сентября 2011

Вот один из способов сделать это

x = list('Brachy leaf N11428394 1', 
        'Brachy leaf N10508942 141', 
        'Brachy leaf N356635')
sapply(sapply(x, strsplit, split = " "), '[', 3)

Это дает

[1] "N11428394" "N10508942" "N356635" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...