Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何访问列表索引_R_List_Indexing_Apply_Lapply - Fatal编程技术网

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)