在 R 中追加列表元素

AR4*_*459 4 integer if-statement r list append

我有两个大的有序整数列表。我希望位置处length的整数等于位置处的整数[i]hellolength[i]bye整数。

这是一个模拟我的数据集的简化的可重现示例:

c1<- c(0,1,0,1,1,1,0,0) |> as.integer()
c2<- c(0,1,0) |> as.integer()
c3<- c(1,1,1,0,0,0,0,0,0) |> as.integer()
c4<- c(0,1,0,1,0,0,0,1,0,1) |> as.integer()
c5<- c(0,1,0,1,0,0,0,0) |> as.integer()
c6 <-  c(1,1,1,0,0) |> as.integer()

hello<- list(c1, c2, c3)
bye<- list(c4,c5,c6)
Run Code Online (Sandbox Code Playgroud)

列出输出:

hello
[[1]]
[1] 0 1 0 1 1 1 0 0

[[2]]
[1] 0 1 0

[[3]]
[1] 1 1 1 0

bye
[[1]]
 [1] 0 1 0 1 0 0 0 1 0 1

[[2]]
[1] 0 1 0 1 0 0 0 0

[[3]]
[1] 1 1 1 0 0
Run Code Online (Sandbox Code Playgroud)

我希望扩展的相关列表元素的值为appended0。单个列表元素的所需输出如下所示:

hello[[2]]
[1] 0 1 0 0 0 0 0 0

bye[[2]]
[1] 0 1 0 1 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试了带有附加语句的 for 循环,但我无法正常工作。

我认为lapplyorpurrr::map会提供一个更简洁的解决方案,但我仍在尝试了解 R 中的函数式编程。任何帮助将不胜感激。

H 1*_*H 1 5

你可以尝试:

Map(\(x, y) c(x, integer(y))[1L:y], hello, pmax(lengths(hello), lengths(bye)))
Run Code Online (Sandbox Code Playgroud)

或稍有变化:

Map(\(x, y, z) c(x, integer(max(0L, z-y))), hello, lengths(hello), lengths(bye))

[[1]]
 [1] 0 1 0 1 1 1 0 0 0 0

[[2]]
[1] 0 1 0 0 0 0 0 0

[[3]]
[1] 1 1 1 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)