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

时间:2018-12-31 22:56:13

标签: r

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

基本上,我想保留现有列表的结构和名称,但清空所有值,以便稍后填充。我在下面提供了一个最小的示例,并提供了几个解决方案。我更喜欢基本和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 

5 个答案:

答案 0 :(得分:8)

这里是另一个数字向量:

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

更普遍地

lapply(my_list, replace, TRUE, NA)

lapply(ret_list, ifelse, NA, NA)

答案 1 :(得分:7)

您可以在<FrameLayout android:layout_height="wrap_content" android:layout_width="wrap_content"> <HorizontalScrollView android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="match_parent" android:text="BTN1" android:drawableTop="@drawable/ic1"/> <Button android:layout_width="wrap_content" android:layout_height="match_parent" android:text="BTN2" android:drawableTop="@drawable/ic2"/> <Button android:layout_width="wrap_content" android:layout_height="match_parent" android:text="BTN3" android:drawableTop="@drawable/ic3"/> </LinearLayout> </HorizontalScrollView> </FrameLayout> 循环中使用函数is.na<-

lapply

答案 2 :(得分:4)

使用dplyr的另一种选择:

lapply(my_list, function(x) dplyr::na_if(x,x))

答案 3 :(得分:4)

如果列表不限于一个级别,请使用rapply

# test data modified from question
my_list2 <- list(list(A = c(a = 1, b = 2, c = 3)), B = c(x = 10, y = 20))

rapply(my_list2, function(x) replace(x, TRUE, NA), how = "list")

也可以写成:

rapply(my_list2, replace, list = TRUE, values = NA, how = "list")

答案 4 :(得分:3)

另一种解决方法

relist(replace( unlist(my_list), TRUE, NA ), skeleton = my_list)

#$A
# a  b  c 
#NA NA NA 

#$B
# x  y 
#NA NA