以下是我现在的代码
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或其他类似的东西有助于解决方案).
提前感谢您的任何建议.
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)