R 如何访问列表索引
我有一个数字列表(真正的索引位置),如下所示: 我想返回另一个列表,它根据子列表的长度复制原始列表的每个索引。具体来说,结果应该如下所示:R 如何访问列表索引,r,list,indexing,apply,lapply,R,List,Indexing,Apply,Lapply,我有一个数字列表(真正的索引位置),如下所示: 我想返回另一个列表,它根据子列表的长度复制原始列表的每个索引。具体来说,结果应该如下所示: > result [[1]] [1] 1 1 因为1是原始的索引,它的长度是2 [[2]] [1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 因为2是原始的索引,它的长度是26 [[3]] [1] 3 3 3 3 3 3 3 3 3
> result
[[1]]
[1] 1 1
因为1是原始的索引,它的长度是2
[[2]]
[1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
因为2是原始的索引,它的长度是26
[[3]]
[1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
因为3是原始的索引,它的长度是27
在我看来,只要我可以访问索引位置,它应该是这样的:
lapply(original, function(x) rep(index(x), length(x)))
这失败了,因为我显然无法以这种方式访问lapply中列表的索引,也无法以我尝试过的任何其他方式访问
以前有人这样做过吗?您可以在这里使用
mappy
访问索引和列表元素
mapply(function(x, y) rep(x, length(y)), seq_along(original), original)
#[[1]]
#[1] 1 1 1
#[[2]]
#[1] 2 2
#[[3]]
#[1] 3 3 3 3 3 3 3 3
举一个不同的例子,因为它很容易复制
数据
original <- list(c(1:3), c(4, 5), c(1:8))
original
#[[1]]
#[1] 1 2 3
#[[2]]
#[1] 4 5
#[[3]]
#[1] 1 2 3 4 5 6 7 8
使用
purr
library(purrr)
original %>% map2(.y=seq_along(original),~rep(.y,length(.x)))
您可以relist()
索引向量,使用原始列表作为骨架
relist(rep(seq_along(original), lengths(original)), original)
# [[1]]
# [1] 1 1 1
#
# [[2]]
# [1] 2 2
#
# [[3]]
# [1] 3 3 3 3 3 3 3 3
数据:
原件
library(purrr)
original %>% map2(.y=seq_along(original),~rep(.y,length(.x)))
relist(rep(seq_along(original), lengths(original)), original)
# [[1]]
# [1] 1 1 1
#
# [[2]]
# [1] 2 2
#
# [[3]]
# [1] 3 3 3 3 3 3 3 3
original <- list(1:3, 4:5, 1:8)