R如何检查每个元素然后返回一个布尔值

时间:2015-09-13 05:31:39

标签: r matrix

我想检查一个名为“answer的列表,如果它包含FALSE元素,然后返回一个布尔值(F),如果没有任何FALSE元素,换句话说都是TRUE,返回一个布尔值(T) 这是代码(不是太多行,但我不知道更简单的代码)

    >answer=c(TRUE,FALSE,FALSE)
    >l=length(answer)
    >ind <- 1
    >t=0
    >f=0
    >while(ind<(length(answer)+1)){
    >ifelse(answer[ind]==TRUE,t<-t+1,f<-f+1)
    >ind<-ind+1
    >}
    >ifelse(f>0,print("False"),print("True"))

这部分代码可以给我正确的结果。但它给了我两次!! 像这样:

[1] "True"
[1] "True"

为什么要给我两次......请帮助我,我不想使用这个功能那么多行

1 个答案:

答案 0 :(得分:1)

您获得两次打印的原因是ifelse(f>0,print("False"),print("True"))将首先评估f>0(这是正确的),然后评估print("False")(这将导致&#34; False&# 34;打印到控制台),最后ifelse将返回print("False")(&#34; False&#34;)的值,然后将其自动打印到控制台(第二次打印)。 / p>

要绕过双面打印,您可以用

替换最后一行
> ifelse(f>0,"False","True")

但请注意,此代码或代码都没有返回布尔值,它们都返回字符串。如果你想要一个布尔值,你应该使用

> ifelse(f>0,FALSE,TRUE)

然而,可以采取一些措施来改进此代码。您可以使用for循环直接遍历answer向量(不需要ind变量。更好的是,您可以使用R允许您添加两个值的事实布尔值(TRUE = 1,FALSE = 0),因此sum(answer)将为您提供向量中的TRUE值。

解决这个问题的最简单方法是执行baptiste暗示all(answer)将评估为TRUE,如果答案只包含TRUE值,这似乎是你想要的。