如何获取列表中每个项目的第n个元素,这本身就是一个未知长度的向量

时间:2017-03-25 09:35:29

标签: r list vector sublist

如果我们有一个列表,每个项目可以有不同的长度。例如:

l <- list(c(1, 2), c(3, 4,5), c(5), c(6,7))

(为了清楚起见,我们将在列表“items”中调用对象,并在列表“elements”的对象中调用对象。)

我们如何提取,例如每个项目的第一个元素?在这里,我想提取:

1, 3, 5, 6

然后对每个项目的第二个元素提出同样的问题:

2, 4, NA, 7

3 个答案:

答案 0 :(得分:10)

我们可以使用sapply

创建一个函数
fun1 <- function(lst, n){
         sapply(lst, `[`, n)
   }
fun1(l, 1)
#[1] 1 3 5 6

fun1(l, 2)
#[1]  2  4 NA  7

答案 1 :(得分:3)

data.table::transpose(l)会给你一个包含所有第一个元素的矢量列表,所有第二个元素等等。

l <- list(1:2, 3:4, 5:7, 8:10)
b <- data.table::transpose(l)
b
# [[1]]
# [1] 1 3 5 8
# 
# [[2]]
# [1] 2 4 6 9
# 
# [[3]]
# [1] NA NA  7 10

如果您不想要NAs,可以lapply(b, function(x) x[!is.na(x)])

答案 2 :(得分:0)

# the source list 
source_list <- list(c(1, 2), c(3, 4,5), c(5), c(6,7))

# the index of the elements you want 
k <- 1

# the results character vector 
x <- c()

for (item in source_list) {
     x <- append(x, item[k])
   }

print(x)
[1] 1 3 5 6