如何从R中列表的每个向量中选择项目

时间:2011-09-21 11:08:07

标签: r

我想从下面列表的每个向量中选择第三个项目。 我试过这种方式,但是我在第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 个答案:

答案 0 :(得分:6)

如果我理解您显示的代码,并且x是您要从中选择的列表,那么这将有效:

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

说明:

lapply()获取提供的列表的每个组件并向其应用函数。实际上,它正在提取x[[1]]并对其应用FUN,然后提取x[[2]]并对其应用FUN,依此类推。因此,您需要处理代码的这一部分:x[[1:140]]。您只需要应用FUN对3元素进行提取。 `[`实际上是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"

答案 1 :(得分:5)

这是一种方法

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

这给出了

[1] "N11428394" "N10508942" "N356635"