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 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]]
ml-r-help at epigenomics.com
2009-Apr-29 15:05 UTC
[R] if condition doesn't evaluate to True/False
see ?is.null e.g. if( is.null(sub_grp_whr_cls_data[sbgrp_no, 1]) ) { your code } Moumita Das wrote:> 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 > > 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. > > > > ------------------------------------------------------------------------ > > ______________________________________________ > 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.-- Matthias Burger Project Manager/ Biostatistician Epigenomics AG Kleine Praesidentenstr. 1 10178 Berlin, Germany phone:+49-30-24345-0 fax:+49-30-24345-555 http://www.epigenomics.com matthias.burger at epigenomics.com -- Epigenomics AG Berlin Amtsgericht Charlottenburg HRB 75861 Vorstand: Geert Nygaard (CEO/Vorsitzender) Oliver Schacht PhD (CFO) Aufsichtsrat: Prof. Dr. Dr. hc. Rolf Krebs (Chairman/Vorsitzender)
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 NAAre 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 conditionis> available why doesn?t it evaluate to TRUE when a where conditionavailable> 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 thesame> database also, when where clause is available for say one subgroup andnot> 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 guidehttp://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.