在向量列表中将所有向量元素设置为NA

low*_*rul 9 r

如何在矢量列表中将所有矢量元素设置为NA?

基本上,我想保留现有列表的结构和名称,但是清空所有值,以便稍后填写它们.我提供了一个最小的例子,下面是几个解决方案.我更喜欢base和tidyverse(尤其是purrr)解决方案,但可以采用任何比我下面更好的方法.

my_list <- list(A = c('a' = 1, 'b' = 2, 'c' = 3), B = c('x' = 10, 'y' = 20))
ret_list <- my_list

# Approach 1
for (element_name in names(my_list)) {
  ret_list[[element_name]][] <- NA
}

ret_list
# $A
# a  b  c 
# NA NA NA 
# 
# $B
# x  y 
# NA NA 

# Approach 2    
lapply(my_list, function(x) {x[] <- NA; return(x)})
# $A
# a  b  c 
# NA NA NA 
# 
# $B
# x  y 
# NA NA 
Run Code Online (Sandbox Code Playgroud)

Jul*_*ora 8

这是另一个数字向量:

lapply(my_list, `*`, NA) # Instead of * it could also be +, -, etc.
# $A
#  a  b  c 
# NA NA NA 
#
# $B
#  x  y 
# NA NA 
Run Code Online (Sandbox Code Playgroud)

更普遍,

lapply(my_list, replace, TRUE, NA)
Run Code Online (Sandbox Code Playgroud)

lapply(ret_list, ifelse, NA, NA)
Run Code Online (Sandbox Code Playgroud)


Rui*_*das 8

您可以is.na<-lapply循环中使用函数.

ret_list <- lapply(my_list, `is.na<-`)
ret_list
#$A
# a  b  c 
#NA NA NA 
#
#$B
# x  y 
#NA NA 
Run Code Online (Sandbox Code Playgroud)