Mark Kimpel
2009-Jul-04 17:56 UTC
[R] help with dealing with integer(0) returns from grep used within a conditional loop
I am using grep to locate colnames to automate a report build and have run into a problem when a colname is not found. The use of integer(0) in a conditional statement seems to be a no no as it has length 0. Below is a self-contained trivial example. I would like to get something like "NA" or -1 for the position when it is not found OR learn a way to use integer(0) or some "cast" of it in a logical statement. Example, output, and sessionInfo follow. Thanks, Mark ####################################3 vec.1 <- c("a", "b", "c") vec.2 <- c("a", "c", "d") for (i in 1:length(vec.1)){ for (j in 1:length(vec.2)){ print(paste("i:", i, " j:", j, sep = "")) pos <- grep(vec.1[i], vec.2[j]) if (pos > 0){ print("pos identified") } else{ print("pos not found") } } } ################################> #################################3 > vec.1 <- c("a", "b", "c") > vec.2 <- c("a", "c", "d") > for (i in 1:length(vec.1)){+ for (j in 1:length(vec.2)){ + print(paste("i:", i, " j:", j, sep = "")) + pos <- grep(vec.1[i], vec.2[j]) + if (pos > 0){ + print("pos identified") + } + else{ + print("pos not found") + } + } + } [1] "i:1 j:1" [1] "pos identified" [1] "i:1 j:2" Error in if (pos > 0) { : argument is of length zero No suitable frames for recover()> ############### > sessionInfo()R version 2.9.1 (2009-06-26) x86_64-unknown-linux-gnu locale: LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=C;LC_MESSAGES=en_US.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=C attached base packages: [1] tcltk stats graphics grDevices datasets utils methods [8] base other attached packages: [1] sfsmisc_1.0-7 KEGG.db_2.2.11 GO.db_2.2.11 [4] rat2302.db_2.2.11 GOstats_2.10.0 RSQLite_0.7-1 [7] DBI_0.2-4 graph_1.22.2 Category_2.10.1 [10] AnnotationDbi_1.6.1 qvalue_1.18.0 limma_2.18.2 [13] affy_1.22.0 Biobase_2.4.1 loaded via a namespace (and not attached): [1] affyio_1.12.0 annotate_1.22.0 genefilter_1.24.2 [4] GSEABase_1.6.1 preprocessCore_1.6.0 RBGL_1.20.0 [7] splines_2.9.1 survival_2.35-4 tools_2.9.1 [10] XML_2.5-3 xtable_1.5-5 ------------------------------------------------------------ Mark W. Kimpel MD ** Neuroinformatics ** Dept. of Psychiatry Indiana University School of Medicine 15032 Hunter Court, Westfield, IN 46074 (317) 490-5129 Work, & Mobile & VoiceMail "The real problem is not whether machines think but whether men do." -- B. F. Skinner
Allan Engelhardt
2009-Jul-04 18:47 UTC
[R] help with dealing with integer(0) returns from grep used within a conditional loop
On 04/07/09 18:56, Mark Kimpel wrote:> I am using grep to locate colnames to automate a report build and have > run into a problem when a colname is not found. The use of integer(0) > in a conditional statement seems to be a no no as it has length 0. > Below is a self-contained trivial example. I would like to get > something like "NA" or -1 for the position when it is not found OR > learn a way to use integer(0) or some "cast" of it in a logical > statement. Example, output, and sessionInfo follow. Thanks, Mark > > ####################################3 > vec.1<- c("a", "b", "c") > vec.2<- c("a", "c", "d") > for (i in 1:length(vec.1)){ > for (j in 1:length(vec.2)){ > print(paste("i:", i, " j:", j, sep = "")) > pos<- grep(vec.1[i], vec.2[j]) > if (pos> 0){ >Try: if ( length(pos) > 0 ) { Allan.
hadley wickham
2009-Jul-04 21:08 UTC
[R] help with dealing with integer(0) returns from grep used within a conditional loop
On Sat, Jul 4, 2009 at 7:56 PM, Mark Kimpel<mwkimpel at gmail.com> wrote:> I am using grep to locate colnames to automate a report build and have > run into a problem when a colname is not found. The use of integer(0) > in a conditional statement seems to be a no no as it has length 0. > Below is a self-contained trivial example. I would like to get > something like "NA" or -1 for the position when it is not found OR > learn a way to use integer(0) or some "cast" of it in a logical > statement. Example, output, and sessionInfo follow. Thanks, MarkYou might also consider using grepl instead of grep. grepl works just like grep, but returns a logical vector. Hadley -- http://had.co.nz/
Henrique Dallazuanna
2009-Jul-04 22:09 UTC
[R] help with dealing with integer(0) returns from grep used within a conditional loop
You cas use isTRUE: isTRUE(grep("a", "bbbb") > 0) On Sat, Jul 4, 2009 at 2:56 PM, Mark Kimpel <mwkimpel@gmail.com> wrote:> I am using grep to locate colnames to automate a report build and have > run into a problem when a colname is not found. The use of integer(0) > in a conditional statement seems to be a no no as it has length 0. > Below is a self-contained trivial example. I would like to get > something like "NA" or -1 for the position when it is not found OR > learn a way to use integer(0) or some "cast" of it in a logical > statement. Example, output, and sessionInfo follow. Thanks, Mark > > ####################################3 > vec.1 <- c("a", "b", "c") > vec.2 <- c("a", "c", "d") > for (i in 1:length(vec.1)){ > for (j in 1:length(vec.2)){ > print(paste("i:", i, " j:", j, sep = "")) > pos <- grep(vec.1[i], vec.2[j]) > if (pos > 0){ > print("pos identified") > } > else{ > print("pos not found") > } > } > } > ################################ > > > #################################3 > > vec.1 <- c("a", "b", "c") > > vec.2 <- c("a", "c", "d") > > for (i in 1:length(vec.1)){ > + for (j in 1:length(vec.2)){ > + print(paste("i:", i, " j:", j, sep = "")) > + pos <- grep(vec.1[i], vec.2[j]) > + if (pos > 0){ > + print("pos identified") > + } > + else{ > + print("pos not found") > + } > + } > + } > [1] "i:1 j:1" > [1] "pos identified" > [1] "i:1 j:2" > Error in if (pos > 0) { : argument is of length zero > No suitable frames for recover() > > ############### > > sessionInfo() > R version 2.9.1 (2009-06-26) > x86_64-unknown-linux-gnu > > locale: > > LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=C;LC_MESSAGES=en_US.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=C > > attached base packages: > [1] tcltk stats graphics grDevices datasets utils methods > [8] base > > other attached packages: > [1] sfsmisc_1.0-7 KEGG.db_2.2.11 GO.db_2.2.11 > [4] rat2302.db_2.2.11 GOstats_2.10.0 RSQLite_0.7-1 > [7] DBI_0.2-4 graph_1.22.2 Category_2.10.1 > [10] AnnotationDbi_1.6.1 qvalue_1.18.0 limma_2.18.2 > [13] affy_1.22.0 Biobase_2.4.1 > > loaded via a namespace (and not attached): > [1] affyio_1.12.0 annotate_1.22.0 genefilter_1.24.2 > [4] GSEABase_1.6.1 preprocessCore_1.6.0 RBGL_1.20.0 > [7] splines_2.9.1 survival_2.35-4 tools_2.9.1 > [10] XML_2.5-3 xtable_1.5-5 > ------------------------------------------------------------ > Mark W. Kimpel MD ** Neuroinformatics ** Dept. of Psychiatry > Indiana University School of Medicine > > 15032 Hunter Court, Westfield, IN 46074 > > (317) 490-5129 Work, & Mobile & VoiceMail > > "The real problem is not whether machines think but whether men do." > -- B. F. Skinner > > ______________________________________________ > R-help@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. >-- Henrique Dallazuanna Curitiba-Paraná-Brasil 25° 25' 40" S 49° 16' 22" O [[alternative HTML version deleted]]
Duncan Murdoch
2009-Jul-04 23:43 UTC
[R] help with dealing with integer(0) returns from grep used within a conditional loop
On 04/07/2009 6:09 PM, Henrique Dallazuanna wrote:> You cas use isTRUE: > > isTRUE(grep("a", "bbbb") > 0)Not really. If there are multiple hits, that returns FALSE. You want to use length(grep(...)) to detect any hits. Duncan Murdoch> > > On Sat, Jul 4, 2009 at 2:56 PM, Mark Kimpel <mwkimpel at gmail.com> wrote: > >> I am using grep to locate colnames to automate a report build and have >> run into a problem when a colname is not found. The use of integer(0) >> in a conditional statement seems to be a no no as it has length 0. >> Below is a self-contained trivial example. I would like to get >> something like "NA" or -1 for the position when it is not found OR >> learn a way to use integer(0) or some "cast" of it in a logical >> statement. Example, output, and sessionInfo follow. Thanks, Mark >> >> ####################################3 >> vec.1 <- c("a", "b", "c") >> vec.2 <- c("a", "c", "d") >> for (i in 1:length(vec.1)){ >> for (j in 1:length(vec.2)){ >> print(paste("i:", i, " j:", j, sep = "")) >> pos <- grep(vec.1[i], vec.2[j]) >> if (pos > 0){ >> print("pos identified") >> } >> else{ >> print("pos not found") >> } >> } >> } >> ################################ >> >>> #################################3 >>> vec.1 <- c("a", "b", "c") >>> vec.2 <- c("a", "c", "d") >>> for (i in 1:length(vec.1)){ >> + for (j in 1:length(vec.2)){ >> + print(paste("i:", i, " j:", j, sep = "")) >> + pos <- grep(vec.1[i], vec.2[j]) >> + if (pos > 0){ >> + print("pos identified") >> + } >> + else{ >> + print("pos not found") >> + } >> + } >> + } >> [1] "i:1 j:1" >> [1] "pos identified" >> [1] "i:1 j:2" >> Error in if (pos > 0) { : argument is of length zero >> No suitable frames for recover() >>> ############### >>> sessionInfo() >> R version 2.9.1 (2009-06-26) >> x86_64-unknown-linux-gnu >> >> locale: >> >> LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=C;LC_MESSAGES=en_US.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=C >> >> attached base packages: >> [1] tcltk stats graphics grDevices datasets utils methods >> [8] base >> >> other attached packages: >> [1] sfsmisc_1.0-7 KEGG.db_2.2.11 GO.db_2.2.11 >> [4] rat2302.db_2.2.11 GOstats_2.10.0 RSQLite_0.7-1 >> [7] DBI_0.2-4 graph_1.22.2 Category_2.10.1 >> [10] AnnotationDbi_1.6.1 qvalue_1.18.0 limma_2.18.2 >> [13] affy_1.22.0 Biobase_2.4.1 >> >> loaded via a namespace (and not attached): >> [1] affyio_1.12.0 annotate_1.22.0 genefilter_1.24.2 >> [4] GSEABase_1.6.1 preprocessCore_1.6.0 RBGL_1.20.0 >> [7] splines_2.9.1 survival_2.35-4 tools_2.9.1 >> [10] XML_2.5-3 xtable_1.5-5 >> ------------------------------------------------------------ >> Mark W. Kimpel MD ** Neuroinformatics ** Dept. of Psychiatry >> Indiana University School of Medicine >> >> 15032 Hunter Court, Westfield, IN 46074 >> >> (317) 490-5129 Work, & Mobile & VoiceMail >> >> "The real problem is not whether machines think but whether men do." >> -- B. F. Skinner >> >> ______________________________________________ >> 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. >> > > > > > ------------------------------------------------------------------------ > > ______________________________________________ > 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.