假设我有以下列表:
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)
。
谢谢
答案 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