[R] Odp: if condition doesn't evaluate to True/False

Petr PIKAL petr.pikal at precheza.cz
Wed Apr 29 17:07:41 CEST 2009


Hi

you put your problem in absolutely messy state

r-help-bounces at r-project.org napsal dne 29.04.2009 16:16:55:

> Hi friends,
> Please help me with this bug.
> 
> *Bug in my code:*
> 
> In this variable sub_grp_whr_cls_data[sbgrp_no,1] I store the where
> clause.every sub group has a where condition linked with it.
> 
> Database1
> 
> 
> Where clause  was  not found for a particular subgroup,
> sub_grp_whr_cls_data[sbgrp_no,1]  value was NULL
> 
> So the condition (*sub_grp_whr_cls_data[sbgrp_no,1]=="NULL" ||
> sub_grp_whr_cls_data[sbgrp_no,1]==""*) should evaluate to TRUE ,but it
> evaluated to NA

Are you sure that 
sub_grp_whr_cls_data[sbgrp_no,1] was either "NULL" or ""

I suspect that it is NA

you can get three results with logical values

> x<-c(1,"NULL", NA, "", 1)
> x=="NULL"|x==""
[1] FALSE  TRUE    NA  TRUE FALSE

So if the value is "NULL" or "" you will get TRUE, if it is anything else 
you will get FALSE but if it is NA you will get NA.

Actually if the value is NA you do not know if it should be "NULL", "" or 
anything else therefore result is NA

Regards
Petr

> 
> So the if block where I used the the condition threw error
> 
> If(*sub_grp_whr_cls_data[sbgrp_no,1]=="NULL" ||
> sub_grp_whr_cls_data[sbgrp_no,1]==""*)
> 
> i.e if(NA)
> 
> Error:--
> 
> Error in if (sub_grp_whr_cls_data[sbgrp_no, 1] == "NULL" ||
> sub_grp_whr_cls_data[sbgrp_no,  :
> 
>   missing value where TRUE/FALSE needed
> 
> Comments:-- but when there ‘s no where clause value the condition
> (sub_grp_whr_cls_data[sbgrp_no,1]=="NULL"
> ||sub_grp_whr_cls_data[sbgrp_no,1]=="") should automatically evaluate to 
*
> TRUE*
> 
> 
> 
> Database2
> 
> Where clause  was  found for a particular subgroup
> 
> The condition (sub_grp_whr_cls_data[sbgrp_no,1]=="NULL"
> ||sub_grp_whr_cls_data[sbgrp_no,1]=="") evaluated to FALSE
> 
> So if (sub_grp_whr_cls_data[sbgrp_no,1]=="NULL"
> ||sub_grp_whr_cls_data[sbgrp_no,1]=="") is
> 
> If (FALSE) ,control goes to the else part.
> 
> This is exactly what is expected of the program.
> 
> *QUERY:-- **If the condition evaluates to FALSE  when a where condition 
is
> available why doesn’t it evaluate to TRUE when a where condition 
available
> is NULL or no where condition is available.*
> 
> Here I have taken the example of two databases where I tried to get the
> where clause for subgroup 1.In case of Database1 it was not available in
> case of Databse2 it was available.But the problem may appear for the 
same
> database also, when where clause is available for say one subgroup and 
not
> for the other.
> 
> -- 
> Thanks
> Moumita
> 
>    [[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide 
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list