获取R中列表列表的列
Get the column of a list of lists in R
使用 R,我的数据集 L
是一个列表列表。我的 print(L)
产生以下输出:
[[1]]
[[1]][[1]]
[1] 0.8198689
[[1]][[2]]
[1] 0.8166747
[[2]]
[[2]][[1]]
[1] 0.5798426
[[2]][[2]]
[1] 0.5753511
[[3]]
[[3]][[1]]
[1] 0.4713508
[[3]][[2]]
[1] 0.4698621
我想得到第二列的向量。但是 unlist(L[[2]])
给我第二行(不是第二列),L[,2]
给我错误 Error in L[, 2] : incorrect number of dimensions
。我也试过 L$'2
' 但没有用。
如何在 R 中获取该数据集第二列的向量?
1) 假设输入在末尾的注释中可重复显示,请使用 sapply(如果您希望将其作为列表,则使用 lapply)。没有使用包。
sapply(L, `[[`, 2)
## [1] 0.8166747 0.5753511 0.4698621
2) 使用 purrr 我们有:
library(purrr)
transpose(L)[[2]]
## [[1]]
## [1] 0.8166747
##
## [[2]]
## [1] 0.5753511
##
## [[3]]
## [1] 0.4698621
3) 如果我们知道 L 是规则形状的,我们可以将它转换为矩阵,然后取第二列。
matrix(unlist(L), length(L), byrow = TRUE)[, 2]
## [1] 0.8166747 0.5753511 0.4698621
或作为列表
do.call("rbind", L)[, 2]
4) 这里的第二列是每个“行”中的最后一项,如果这是您想要的,因为即使列表参差不齐也能正常工作,然后试试这个
mapply('[[', L, lengths(L))
## [1] 0.8166747 0.5753511 0.4698621
或作为列表
Map('[[', L, lengths(L))
备注
# input in reproducible form
L <- list(
list(0.8198689, 0.8166747),
list(0.5798426, 0.5753511),
list(0.4713508, 0.4698621))
使用 purrr
执行此操作的简单方法就是使用 map()
,其中 returns 是一个列表。
library(purrr)
map(L, 2)
如果你想要一个(数字)向量,使用map_dbl()
。
map_dbl(L, 2)
# [1] 0.8166747 0.5753511 0.4698621
使用 R,我的数据集 L
是一个列表列表。我的 print(L)
产生以下输出:
[[1]]
[[1]][[1]]
[1] 0.8198689
[[1]][[2]]
[1] 0.8166747
[[2]]
[[2]][[1]]
[1] 0.5798426
[[2]][[2]]
[1] 0.5753511
[[3]]
[[3]][[1]]
[1] 0.4713508
[[3]][[2]]
[1] 0.4698621
我想得到第二列的向量。但是 unlist(L[[2]])
给我第二行(不是第二列),L[,2]
给我错误 Error in L[, 2] : incorrect number of dimensions
。我也试过 L$'2
' 但没有用。
如何在 R 中获取该数据集第二列的向量?
1) 假设输入在末尾的注释中可重复显示,请使用 sapply(如果您希望将其作为列表,则使用 lapply)。没有使用包。
sapply(L, `[[`, 2)
## [1] 0.8166747 0.5753511 0.4698621
2) 使用 purrr 我们有:
library(purrr)
transpose(L)[[2]]
## [[1]]
## [1] 0.8166747
##
## [[2]]
## [1] 0.5753511
##
## [[3]]
## [1] 0.4698621
3) 如果我们知道 L 是规则形状的,我们可以将它转换为矩阵,然后取第二列。
matrix(unlist(L), length(L), byrow = TRUE)[, 2]
## [1] 0.8166747 0.5753511 0.4698621
或作为列表
do.call("rbind", L)[, 2]
4) 这里的第二列是每个“行”中的最后一项,如果这是您想要的,因为即使列表参差不齐也能正常工作,然后试试这个
mapply('[[', L, lengths(L))
## [1] 0.8166747 0.5753511 0.4698621
或作为列表
Map('[[', L, lengths(L))
备注
# input in reproducible form
L <- list(
list(0.8198689, 0.8166747),
list(0.5798426, 0.5753511),
list(0.4713508, 0.4698621))
使用 purrr
执行此操作的简单方法就是使用 map()
,其中 returns 是一个列表。
library(purrr)
map(L, 2)
如果你想要一个(数字)向量,使用map_dbl()
。
map_dbl(L, 2)
# [1] 0.8166747 0.5753511 0.4698621