如何从特定位置的列表中提取值

时间:2014-10-24 08:01:27

标签: r list

假设我有以下列表:

x <- list(rbind(c(1,1,1,0),c(1,0,1,0), c(1,0,0,0)), c(1,1,0,1), c(1,2,3,4))

我知道如何使用unlist(lapply(x, "[[", 4)),但只有当它们是列表中的向量时才有用。

如果我想提取每个列表的最后一列,我该怎么做?

返回值应为c(0, 1, 4)

谢谢

2 个答案:

答案 0 :(得分:0)

第二个和第三个list元素只是vectors。此外,您提取last column和预期结果的描述令人困惑。如果要提取最后一个元素。

 sapply(x,  function(.x) tail(c(.x),1))
 #[1] 0 1 4

或者您可以将vector元素转换为matrix,然后提取columns

  x1 <- lapply(x, function(.x) if(is.vector(.x)) t(.x) else (.x))
  x2 <- lapply(x1, `[`,,4)
  x2
  #[[1]]
  #[1] 0 0 0

  #[[2]]
  #[1] 1

  #[[3]]
  #[1] 4

   unique(unlist(x2))
   #[1] 0 1 4

此外,您的代码仅提取特定位置的元素,而不是columns。例如:

  z <- list(matrix(c(1:6), ncol=3), matrix(c(1:12), ncol=4))
  lapply(z, `[[`, 3) #extracts the third element and not the third column
  #[[1]]
  #[1] 3

  #[[2]]
  #[1] 3

而,

   lapply(z, `[`, ,3)
  #[[1]]
  #[1] 5 6

  #[[2]]
  #[1] 7 8 9

答案 1 :(得分:0)

我会用

unlist(lapply(x, function(y) if(is.vector(y)) y[length(y)] else unique(y[,ncol(y)])))
#[1] 0 1 4