复制列表元素以填充NA列表元素

Tre*_*lof 3 r list

以下是我现在的代码

set.seed(20)
test_list <- list("1" = matrix(rnorm(100), 10, 10), 
                  "2" = NA, 
                  "3" = NA, 
                  "4" = NA, 
                  "5" = NA, 
                  "6" = matrix(rnorm(100), 10, 10), 
                  "7" = NA, 
                  "8" = NA)
Run Code Online (Sandbox Code Playgroud)

我想找到一种方法来复制不包含带有先前元素内容的NA的列表元素,以便填充每个列表元素.元素1-5将包含元素1中的矩阵,6-8将包含元素6中的矩阵.我可以设置这个问题而不使用NA作为应该复制的元素(如果使用NULL或其他类似的东西有助于解决方案).

提前感谢您的任何建议.

ale*_*laz 5

is.na可以完全按照这里所需的方式处理"list":TRUE如果是单个的 话:返回NA:

is.na(test_list)
#    1     2     3     4     5     6     7     8 
#FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
Run Code Online (Sandbox Code Playgroud)

这种行为is.na也使得"list"的测试变得高效,因为它避免了使用(length!= 1)检查任何元素.

构建一个NAlocf功能:

cummax((!is.na(test_list)) * seq_along(test_list))
#1 2 3 4 5 6 7 8 
#1 1 1 1 1 6 6 6 
Run Code Online (Sandbox Code Playgroud)

我们的子集test_list:

test_list[cummax((!is.na(test_list)) * seq_along(test_list))]
Run Code Online (Sandbox Code Playgroud)