使用R从另一个列表创建列表

使用R从另一个列表创建列表,r,list,R,List,我有一张字母表 [1] a b c [2] b c a b 还有字母的向量v [1] a [2] b 我的目标是一个接一个地获取向量v的字母,并创建一个新列表,其中包含该字母之后出现的所有字母。 例如 我取了v“a”的第一个字母,创建了出现在“a”之后的字母列表,得到如下结果: [1] b c [2] b 在我取了第二个字母或v之后,它是“b” 我在名单上加上: [3] c [4] c a b 因此,最终结果是: [1] b c [2] b [3] c [4] c a b

我有一张字母表

[1] a b c
[2] b c a b
还有字母的向量v

[1] a
[2] b
我的目标是一个接一个地获取向量v的字母,并创建一个新列表,其中包含该字母之后出现的所有字母。 例如 我取了v“a”的第一个字母,创建了出现在“a”之后的字母列表,得到如下结果:

[1] b c
[2] b
在我取了第二个字母或v之后,它是“b” 我在名单上加上:

[3] c   
[4] c a b
因此,最终结果是:

[1] b c
[2] b
[3] c   
[4] c a b
我不知道怎么做,看起来很复杂

我还有一个向量列表,采用这种格式

[[1]]
[1] a
[2] b 
[3] c
[[2]]
[1] e
[2] g

这里有一种使用lappy的方法

dat <- list( c("a", "b", "c"), c("b", "c", "a", "b"))
v <- c("a", "b")

result <- list()
for (l in v) {
  result[[l]] <- lapply(dat, function(z) z[(which(z == l)[1] + 1):length(z)])
}
result

dat这里有一种使用lappy的方法

dat <- list( c("a", "b", "c"), c("b", "c", "a", "b"))
v <- c("a", "b")

result <- list()
for (l in v) {
  result[[l]] <- lapply(dat, function(z) z[(which(z == l)[1] + 1):length(z)])
}
result

datA嵌套的
lappy

lapply(v, function(v, l) lapply(l, function(x, v) {
  if (!(v %in% x)) return(x) #the case of no match
  x[-seq_len(which.max(x == v))]
}, v = v), l = l)
#[[1]]
#[[1]][[1]]
#[1] "b" "c"
#
#[[1]][[2]]
#[1] "b"
#
#
#[[2]]
#[[2]][[1]]
#[1] "c"
#
#[[2]][[2]]
#[1] "c" "a" "b"

嵌套的
lappy

lapply(v, function(v, l) lapply(l, function(x, v) {
  if (!(v %in% x)) return(x) #the case of no match
  x[-seq_len(which.max(x == v))]
}, v = v), l = l)
#[[1]]
#[[1]][[1]]
#[1] "b" "c"
#
#[[1]][[2]]
#[1] "b"
#
#
#[[2]]
#[[2]][[1]]
#[1] "c"
#
#[[2]][[2]]
#[1] "c" "a" "b"