David Carlson
2021-Jun-06 19:21 UTC
[R] Beginner problem - using mod function to print odd numbers
There is really no need for a loop: num <- 1:100 num[ifelse(num %% 2 == 1, TRUE, FALSE)] [1] 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 [26] 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 David L Carlson On Sat, Jun 5, 2021 at 2:05 PM William Michels via R-help <r-help at r-project.org> wrote:> > > i <- 1L; span <- 1:100; result <- NA; > > for (i in span){ > + ifelse(i %% 2 != 0, result[i] <- TRUE, result[i] <- FALSE) > + } > > span[result] > [1] 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 > 45 47 49 51 53 55 57 > [30] 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 > > > > HTH, Bill. > > W. Michels, Ph.D. > > > On Sat, Jun 5, 2021 at 12:55 AM Stefan Evert <stefanML at collocations.de> wrote: > > > > > > > > I don't understand. -- > > > > > > 7%%2=1 > > > 9%%2=1 > > > 11%%2=1 > > > > > > What aren't these numbers printing ? > > > > > > num<-0 > > > for (i in 1:100){ > > > num<-num+i > > > if (num%%2 != 0) > > > print(num) > > > } > > > > Your code tests the numbers > > > > 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, ? > > > > and correctly prints the odd ones among them. > > > > But I suppose that's not what you wanted to do? > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help__;!!KwNVnqRv!Qe700OYnXI-Qe4XYE55MkVqMX3g4Ic4YFx87U-moxnT0xKw7m-rbNqU-EZd5ixk$ > > PLEASE do read the posting guide https://urldefense.com/v3/__http://www.R-project.org/posting-guide.html__;!!KwNVnqRv!Qe700OYnXI-Qe4XYE55MkVqMX3g4Ic4YFx87U-moxnT0xKw7m-rbNqU-fWVQ0xI$ > > and provide commented, minimal, self-contained, reproducible code. > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help__;!!KwNVnqRv!Qe700OYnXI-Qe4XYE55MkVqMX3g4Ic4YFx87U-moxnT0xKw7m-rbNqU-EZd5ixk$ > PLEASE do read the posting guide https://urldefense.com/v3/__http://www.R-project.org/posting-guide.html__;!!KwNVnqRv!Qe700OYnXI-Qe4XYE55MkVqMX3g4Ic4YFx87U-moxnT0xKw7m-rbNqU-fWVQ0xI$ > and provide commented, minimal, self-contained, reproducible code.
David Carlson
2021-Jun-06 20:09 UTC
[R] Beginner problem - using mod function to print odd numbers
If the loop is necessary: num <- vector() for (i in 1:100) { if(i %% 2 != 0) num <- c(num, i) } num Or modify your code to this to get each odd number printed on a separate row: for (i in 1:100) { if(i %% 2 != 0) print(i) } David L Carlson On Sun, Jun 6, 2021 at 3:21 PM David Carlson <dcarlson at tamu.edu> wrote:> > There is really no need for a loop: > > num <- 1:100 > num[ifelse(num %% 2 == 1, TRUE, FALSE)] > > [1] 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 > [26] 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 > > David L Carlson > > > On Sat, Jun 5, 2021 at 2:05 PM William Michels via R-help > <r-help at r-project.org> wrote: > > > > > i <- 1L; span <- 1:100; result <- NA; > > > for (i in span){ > > + ifelse(i %% 2 != 0, result[i] <- TRUE, result[i] <- FALSE) > > + } > > > span[result] > > [1] 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 > > 45 47 49 51 53 55 57 > > [30] 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 > > > > > > > HTH, Bill. > > > > W. Michels, Ph.D. > > > > > > On Sat, Jun 5, 2021 at 12:55 AM Stefan Evert <stefanML at collocations.de> wrote: > > > > > > > > > > > I don't understand. -- > > > > > > > > 7%%2=1 > > > > 9%%2=1 > > > > 11%%2=1 > > > > > > > > What aren't these numbers printing ? > > > > > > > > num<-0 > > > > for (i in 1:100){ > > > > num<-num+i > > > > if (num%%2 != 0) > > > > print(num) > > > > } > > > > > > Your code tests the numbers > > > > > > 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, ? > > > > > > and correctly prints the odd ones among them. > > > > > > But I suppose that's not what you wanted to do? > > > > > > ______________________________________________ > > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help__;!!KwNVnqRv!Qe700OYnXI-Qe4XYE55MkVqMX3g4Ic4YFx87U-moxnT0xKw7m-rbNqU-EZd5ixk$ > > > PLEASE do read the posting guide https://urldefense.com/v3/__http://www.R-project.org/posting-guide.html__;!!KwNVnqRv!Qe700OYnXI-Qe4XYE55MkVqMX3g4Ic4YFx87U-moxnT0xKw7m-rbNqU-fWVQ0xI$ > > > and provide commented, minimal, self-contained, reproducible code. > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help__;!!KwNVnqRv!Qe700OYnXI-Qe4XYE55MkVqMX3g4Ic4YFx87U-moxnT0xKw7m-rbNqU-EZd5ixk$ > > PLEASE do read the posting guide https://urldefense.com/v3/__http://www.R-project.org/posting-guide.html__;!!KwNVnqRv!Qe700OYnXI-Qe4XYE55MkVqMX3g4Ic4YFx87U-moxnT0xKw7m-rbNqU-fWVQ0xI$ > > and provide commented, minimal, self-contained, reproducible code.
Martin Maechler
2021-Jun-09 09:55 UTC
[R] Beginner problem - using mod function to print odd numbers
>>>>> David Carlson on Sun, 6 Jun 2021 15:21:34 -0400 writes:> There is really no need for a loop: > num <- 1:100 > num[ifelse(num %% 2 == 1, TRUE, FALSE)]> [1] 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 > [26] 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99Well, and the above "works" but is really another proof of my year-long claim that people use ifelse(.) *MUCH MUCH* too often, and should really learn to use alternatives, in this case, "R 101" (*long* before fooverse): Use num[num %% 2 == 1] instead of much slower and ...@#^$ num[ifelse(num %% 2 == 1, TRUE, FALSE)] Martin Maechler ETH Zurich> On Sat, Jun 5, 2021 at 2:05 PM William Michels via R-help > <r-help at r-project.org> wrote:>> >> > i <- 1L; span <- 1:100; result <- NA; >> > for (i in span){ >> + ifelse(i %% 2 != 0, result[i] <- TRUE, result[i] <- FALSE) >> + } >> > span[result] >> [1] 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 [............]