根据 R 中的另一个逻辑列表替换列表中的逻辑元素
replace logical elements in a list based on another logical list in R
我正在尝试根据另一个列表更改我的列表的逻辑值(元素)。基本上,如果两个列表都是“TRUE”,我想将主列表中的值更改为“FALSE”。两个列表的长度都是 5。例如
List_A <- list(c(TRUE,FALSE,TRUE),c(FALSE,TRUE,TRUE),c(FALSE,FALSE,FALSE),c(TRUE,TRUE,TRUE),c(TRUE,FALSE,TRUE))
List_B <-list(c(FALSE,FALSE,FALSE),c(TRUE,TRUE,FALSE),c(TRUE,TRUE,TRUE),c(FALSE,FALSE,TRUE),c(FALSE,TRUE,TRUE))
列表 B 将序列作为名称属性。
期望的输出:
Output <-
list(c(TRUE,FALSE,TRUE),c(FALSE,FALSE,TRUE),c(FALSE,FALSE,FALSE),c(TRUE,TRUE,FALSE),c(TRUE,FALSE,FALSE))
换句话说,listA 中的元素保持不变,除非它们在两个列表中都具有匹配的 TRUE 值,这会将它们替换为 FALSE。
我试过 运行 下面的 for 循环,但它不起作用,而且我不知道如何重定向输出,如果它起作用的话。
for(i in 1:length(List_A)) { List_A[[i]][List_B[[i]]] <- FALSE }
您可以借助 Map
功能。
如果两个值都是 TRUE
,则转向 FALSE
或保留 List_A
的值。
Output <- Map(function(x, y) replace(x, x & y, FALSE), List_A, List_B)
Output
#[[1]]
#[1] TRUE FALSE TRUE
#[[2]]
#[1] FALSE FALSE TRUE
#[[3]]
#[1] FALSE FALSE FALSE
#[[4]]
#[1] TRUE TRUE FALSE
#[[5]]
#[1] TRUE FALSE FALSE
数据
List_A <- list(c(TRUE,FALSE,TRUE),c(FALSE,TRUE,TRUE),c(FALSE,FALSE,FALSE),c(TRUE,TRUE,TRUE),c(TRUE,FALSE,TRUE))
List_B <- list(c(FALSE,FALSE,FALSE),c(TRUE,TRUE,FALSE),c(TRUE,TRUE,TRUE),c(FALSE,FALSE,TRUE),c(FALSE,TRUE,TRUE))
我们可以使用map2
library(purrr)
map2(List_A, List_B, ~ !(.x & .y))
数据
List_A <- list(c(TRUE,FALSE,TRUE),c(FALSE,TRUE,TRUE),c(FALSE,FALSE,FALSE),c(TRUE,TRUE,TRUE),c(TRUE,FALSE,TRUE))
List_B <- list(c(FALSE,FALSE,FALSE),c(TRUE,TRUE,FALSE),c(TRUE,TRUE,TRUE),c(FALSE,FALSE,TRUE),c(FALSE,TRUE,TRUE))
我正在尝试根据另一个列表更改我的列表的逻辑值(元素)。基本上,如果两个列表都是“TRUE”,我想将主列表中的值更改为“FALSE”。两个列表的长度都是 5。例如
List_A <- list(c(TRUE,FALSE,TRUE),c(FALSE,TRUE,TRUE),c(FALSE,FALSE,FALSE),c(TRUE,TRUE,TRUE),c(TRUE,FALSE,TRUE))
List_B <-list(c(FALSE,FALSE,FALSE),c(TRUE,TRUE,FALSE),c(TRUE,TRUE,TRUE),c(FALSE,FALSE,TRUE),c(FALSE,TRUE,TRUE))
列表 B 将序列作为名称属性。
期望的输出:
Output <-
list(c(TRUE,FALSE,TRUE),c(FALSE,FALSE,TRUE),c(FALSE,FALSE,FALSE),c(TRUE,TRUE,FALSE),c(TRUE,FALSE,FALSE))
换句话说,listA 中的元素保持不变,除非它们在两个列表中都具有匹配的 TRUE 值,这会将它们替换为 FALSE。 我试过 运行 下面的 for 循环,但它不起作用,而且我不知道如何重定向输出,如果它起作用的话。
for(i in 1:length(List_A)) { List_A[[i]][List_B[[i]]] <- FALSE }
您可以借助 Map
功能。
如果两个值都是 TRUE
,则转向 FALSE
或保留 List_A
的值。
Output <- Map(function(x, y) replace(x, x & y, FALSE), List_A, List_B)
Output
#[[1]]
#[1] TRUE FALSE TRUE
#[[2]]
#[1] FALSE FALSE TRUE
#[[3]]
#[1] FALSE FALSE FALSE
#[[4]]
#[1] TRUE TRUE FALSE
#[[5]]
#[1] TRUE FALSE FALSE
数据
List_A <- list(c(TRUE,FALSE,TRUE),c(FALSE,TRUE,TRUE),c(FALSE,FALSE,FALSE),c(TRUE,TRUE,TRUE),c(TRUE,FALSE,TRUE))
List_B <- list(c(FALSE,FALSE,FALSE),c(TRUE,TRUE,FALSE),c(TRUE,TRUE,TRUE),c(FALSE,FALSE,TRUE),c(FALSE,TRUE,TRUE))
我们可以使用map2
library(purrr)
map2(List_A, List_B, ~ !(.x & .y))
数据
List_A <- list(c(TRUE,FALSE,TRUE),c(FALSE,TRUE,TRUE),c(FALSE,FALSE,FALSE),c(TRUE,TRUE,TRUE),c(TRUE,FALSE,TRUE))
List_B <- list(c(FALSE,FALSE,FALSE),c(TRUE,TRUE,FALSE),c(TRUE,TRUE,TRUE),c(FALSE,FALSE,TRUE),c(FALSE,TRUE,TRUE))