检查一个TRUE/FALSE值列表是否评估为TRUE

3

我对R比较陌生,请见谅。我有一个循环,其中有一个条件,用于比较两个列表并返回一个由TRUE / FALSE值组成的向量。我真正需要检查的是这个向量是否仅包含TRUE值(意味着两个列表相同)

for ( i in 1:(length(sessions_items_list)-1)){
  if (sessions_items_list[[i]]==sessions_items_list[[i+1]]){
    identical_sessions_df [i,1] <- names(sessions_items_list[i])
    identical_sessions_df [i,2] <- names(sessions_items_list[i+1])
    #identical_sessions_df [i,3] <- sessions_items_list[[i]]
    #identical_sessions_df [i,4] <- sessions_items_list[[i+1]]
  }
}

这里有一些数据:

> sessions_items_list[[2]]
 [1] "111502665618" "111505397996" "121238758674" "121480200508" "131159477858" "161469302097" "161474935929" "171526802604" "231197187139" "231381216285" "251502101205" "261650031415"
[13] "261652085962" "261652452940" "271538491767" "281398254987" "291227243345" "311065441334" "321561638226" "321566237993" "331042848072" "331251405185" "331366646532" "361096154736"
[25] "381043841996"
> sessions_items_list[[3]]
 [1] "111502665618" "111505397996" "121238758674" "131159477858" "161469302097" "161474935929" "171526802604" "231197187139" "231381216285" "251502101205" "261647474153" "261650031415"
[13] "261652085962" "261652452940" "271538491767" "281398254987" "291227243345" "311065441334" "321561638226" "321566237993" "331042848072" "331251405185" "331366646532" "361096154736"
[25] "381043841996"

以下是条件结果示例:
> sessions_items_list[[2]]==sessions_items_list[[3]]
 [1]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

有没有一个简单的函数来检查这个谓词列表是否为真(所有值都为真)?
3个回答

23

也许尝试使用all函数:

> x <- c(rep(TRUE, 5), FALSE)
> y <- c(rep(TRUE, 6))
> all(x)
[1] FALSE
> all(y)
[1] TRUE

正如其名称所示,它检查所有值是否为TRUE。


4

也许不用说,但我经常想检查相反的情况,即向量是否仅包含FALSE值。针对这种情况,请检查是否有任何一个值为真,如果没有(这会给你FALSE),则否定它:

> x <- c(FALSE, TRUE, FALSE)
> y <- c(TRUE, TRUE, TRUE)
> z <- c(FALSE, FALSE, FALSE)
> !any(x)
[1] FALSE
> !any(y)
[1] FALSE
> !any(z)
[1] TRUE

0

这些答案都是向量,而帖子的标题却说“列表”。 要检查逻辑值的列表是否为TRUE,只需在检查之前使用unlist()

> x <- list(rep(TRUE, 5), FALSE)
> y <- list(rep(TRUE, 6))

> all(x)
Error: 'list' object cannot be coerced to type 'logical'
In addition: Warning message:
In all(x) : coercing argument of type 'list' to logical

> unlist(x) |> all()
[1] FALSE
> unlist(y) |> all()
[1] TRUE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接