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 中的函数式编程。任何帮助将不胜感激。
你可以尝试:
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)