Re: [R] Odd behavior of a function within apply
My “count1a” function was only looking for types of integers and characters. There were a few logical types, which were the source of the error. Thanks, Erin On Tue, Aug 9, 2022 at 11:33 AM David Carlson wrote: > Could you have columns that are not character or integer so that y is > never defined in the function? > > count1a(1:5/3) > Error in count1a(1:5/3) : object 'y' not found > > David Carlson > > > On Mon, Aug 8, 2022 at 1:35 PM Erin Hodgess > wrote: > >> OK. I'm back again. So my test1.df is 236x390 If I put in the >> following: lapply(test1.df,count1a) Error in FUN(X[[i]], ...) : >> object 'y' not found > lapply(test1.df,count1a) Error in FUN(X[[i]], >> ...) : object 'y' not found > sapply(test1.df,count1a) >> ZjQcmQRYFpfptBannerStart >> This Message Is From an External Sender >> This message came from outside your organization. >> >> ZjQcmQRYFpfptBannerEnd >> >> OK. I'm back again. >> >> So my test1.df is 236x390 >> >> If I put in the following: >> lapply(test1.df,count1a) >> Error in FUN(X[[i]], ...) : object 'y' not found >> > lapply(test1.df,count1a) >> Error in FUN(X[[i]], ...) : object 'y' not found >> > sapply(test1.df,count1a) >> Error in FUN(X[[i]], ...) : object 'y' not found >> > >> What am I doing wrong, please? >> Thanks, >> Erin >> >> >> Erin Hodgess, PhD >> mailto: erinm.hodg...@gmail.com >> >> >> On Mon, Aug 8, 2022 at 1:41 PM Erin Hodgess wrote: >> >> > Awesome, thanks so much!! >> > >> > Erin Hodgess, PhD >> > mailto: erinm.hodg...@gmail.com >> > >> > >> > On Mon, Aug 8, 2022 at 1:38 PM John Fox wrote: >> > >> >> Dear Erin, >> >> >> >> The problem is that the data frame gets coerced to a character matrix, >> >> and the only column with "" entries is the 9th (the second one you >> >> supplied): >> >> >> >> as.matrix(test1.df) >> >> X1_1_HZP1 X1_1_HBM1_mon X1_1_HBM1_yr >> >> 1 "48160" "December""2014" >> >> 2 "48198" "June""2018" >> >> 3 "80027" "August" "2016" >> >> 4 "48161" ""NA >> >> 5 NA""NA >> >> 6 "48911" "August" "1985" >> >> 7 NA"April" "2019" >> >> 8 "48197" "February""1993" >> >> 9 "48021" ""NA >> >> 10 "11355" "December""1990" >> >> >> >> (Here, test1.df only contains the three columns you provided.) >> >> >> >> A solution is to use sapply: >> >> >> >> > sapply(test1.df, count1a) >> >> X1_1_HZP1 X1_1_HBM1_mon X1_1_HBM1_yr >> >> 2 3 3 >> >> >> >> >> >> I hope this helps, >> >> John >> >> >> >> >> >> On 2022-08-08 1:22 p.m., Erin Hodgess wrote: >> >> > Hello! >> >> > >> >> > I have the following data.frame >> >> > dput(test1.df[1:10,8:10]) >> >> > structure(list(X1_1_HZP1 = c(48160L, 48198L, 80027L, 48161L, >> >> > NA, 48911L, NA, 48197L, 48021L, 11355L), X1_1_HBM1_mon = c("December", >> >> > "June", "August", "", "", "August", "April", "February", "", >> >> > "December"), X1_1_HBM1_yr = c(2014L, 2018L, 2016L, NA, NA, 1985L, >> >> > 2019L, 1993L, NA, 1990L)), row.names = c(NA, 10L), class = "data.frame") >> >> > >> >> > And the following function: >> >> >> dput(count1a) >> >> > function (x) >> >> > { >> >> > if (typeof(x) == "integer") >> >> > y <- sum(is.na(x)) >> >> > if (typeof(x) == "character") >> >> > y <- sum(x == "") >> >> > return(y) >> >> > } >> >> > When I use the apply function with count1a, I get the following: >> >> > apply(test1.df[1:10,8:10],2,count1a) >> >> > X1_1_HZP1 X1_1_HBM1_mon X1_1_HBM1_yr >> >> > NA 3NA >> >> > However, when I do use columns 8 and 10, I get the correct response: >> >> > apply(test1.df[1:10,c(8,10)],2,count1a) >> >> > X1_1_HZP1 X1_1_HBM1_yr >> >> > 23 >> >> >> >> >> > I am really baffled. If I use count1a on a single column, it works >> >> fine. >> >> > >> >> > Any suggestions much appreciated. >> >> > Thanks, >> >> > Sincerely, >> >> > Erin >> >> > >> >> > >> >> > Erin Hodgess, PhD >> >> > mailto: erinm.hodg...@gmail.com >> >> > >> >> > [[alternative HTML version deleted]] >> >> > >> >> > __ >> >> > R-help@r-project.org >> >> mailing list -- To UNSUBSCRIBE and more, see >> >> > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help__;!!KwNVnqRv!CHx9JKnbOObpAt0LltEogLSxDUEl9qJDI6FgqMJBG_kdRHAy8SJJdx6Uq0p4rpBa4E3DkmQ65UImH48MBvSbrfE$ >> >> > PLEASE do read the posting guide >> >> https://urldefense.com/v3/__http://www.R-project.org/posting-guide.html__;!!KwNVnqRv!CHx9JKnbOObpAt0LltEogLSxDUEl9qJDI6FgqMJBG_kdRHAy8SJJdx6Uq0p4rpBa4E3DkmQ65UImH48MdYOqruE$ >> >> > and provide commented, minimal, self-contained, reproducible code. >> >> -- >> >> John Fox, Professor Emeritus >> >> McMaster University >> >> Hamilton, Ontario, Canada >> >> web: >> >> https://urldefense.com/v3/__https://socialsciences.mcmaster.ca/jfox/__;!!KwNVnqRv!CHx9JKnbOObpAt0LltEogLSxDUEl9qJDI6FgqM
Re: [R] Odd behavior of a function within apply
Could you have columns that are not character or integer so that y is never defined in the function? count1a(1:5/3) Error in count1a(1:5/3) : object 'y' not found David Carlson On Mon, Aug 8, 2022 at 1:35 PM Erin Hodgess wrote: > OK. I'm back again. So my test1.df is 236x390 If I put in the > following: lapply(test1.df,count1a) Error in FUN(X[[i]], ...) : > object 'y' not found > lapply(test1.df,count1a) Error in FUN(X[[i]], > ...) : object 'y' not found > sapply(test1.df,count1a) > ZjQcmQRYFpfptBannerStart > This Message Is From an External Sender > This message came from outside your organization. > > ZjQcmQRYFpfptBannerEnd > > OK. I'm back again. > > So my test1.df is 236x390 > > If I put in the following: > lapply(test1.df,count1a) > Error in FUN(X[[i]], ...) : object 'y' not found > > lapply(test1.df,count1a) > Error in FUN(X[[i]], ...) : object 'y' not found > > sapply(test1.df,count1a) > Error in FUN(X[[i]], ...) : object 'y' not found > > > What am I doing wrong, please? > Thanks, > Erin > > > Erin Hodgess, PhD > mailto: erinm.hodg...@gmail.com > > > On Mon, Aug 8, 2022 at 1:41 PM Erin Hodgess wrote: > > > Awesome, thanks so much!! > > > > Erin Hodgess, PhD > > mailto: erinm.hodg...@gmail.com > > > > > > On Mon, Aug 8, 2022 at 1:38 PM John Fox wrote: > > > >> Dear Erin, > >> > >> The problem is that the data frame gets coerced to a character matrix, > >> and the only column with "" entries is the 9th (the second one you > >> supplied): > >> > >> as.matrix(test1.df) > >> X1_1_HZP1 X1_1_HBM1_mon X1_1_HBM1_yr > >> 1 "48160" "December""2014" > >> 2 "48198" "June""2018" > >> 3 "80027" "August" "2016" > >> 4 "48161" ""NA > >> 5 NA""NA > >> 6 "48911" "August" "1985" > >> 7 NA"April" "2019" > >> 8 "48197" "February""1993" > >> 9 "48021" ""NA > >> 10 "11355" "December""1990" > >> > >> (Here, test1.df only contains the three columns you provided.) > >> > >> A solution is to use sapply: > >> > >> > sapply(test1.df, count1a) > >> X1_1_HZP1 X1_1_HBM1_mon X1_1_HBM1_yr > >> 2 3 3 > >> > >> > >> I hope this helps, > >> John > >> > >> > >> On 2022-08-08 1:22 p.m., Erin Hodgess wrote: > >> > Hello! > >> > > >> > I have the following data.frame > >> > dput(test1.df[1:10,8:10]) > >> > structure(list(X1_1_HZP1 = c(48160L, 48198L, 80027L, 48161L, > >> > NA, 48911L, NA, 48197L, 48021L, 11355L), X1_1_HBM1_mon = c("December", > >> > "June", "August", "", "", "August", "April", "February", "", > >> > "December"), X1_1_HBM1_yr = c(2014L, 2018L, 2016L, NA, NA, 1985L, > >> > 2019L, 1993L, NA, 1990L)), row.names = c(NA, 10L), class = "data.frame") > >> > > >> > And the following function: > >> >> dput(count1a) > >> > function (x) > >> > { > >> > if (typeof(x) == "integer") > >> > y <- sum(is.na(x)) > >> > if (typeof(x) == "character") > >> > y <- sum(x == "") > >> > return(y) > >> > } > >> > When I use the apply function with count1a, I get the following: > >> > apply(test1.df[1:10,8:10],2,count1a) > >> > X1_1_HZP1 X1_1_HBM1_mon X1_1_HBM1_yr > >> > NA 3NA > >> > However, when I do use columns 8 and 10, I get the correct response: > >> > apply(test1.df[1:10,c(8,10)],2,count1a) > >> > X1_1_HZP1 X1_1_HBM1_yr > >> > 23 > >> >> > >> > I am really baffled. If I use count1a on a single column, it works > >> fine. > >> > > >> > Any suggestions much appreciated. > >> > Thanks, > >> > Sincerely, > >> > Erin > >> > > >> > > >> > Erin Hodgess, PhD > >> > mailto: erinm.hodg...@gmail.com > >> > > >> > [[alternative HTML version deleted]] > >> > > >> > __ > >> > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > >> > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help__;!!KwNVnqRv!CHx9JKnbOObpAt0LltEogLSxDUEl9qJDI6FgqMJBG_kdRHAy8SJJdx6Uq0p4rpBa4E3DkmQ65UImH48MBvSbrfE$ > >> > PLEASE do read the posting guide > >> https://urldefense.com/v3/__http://www.R-project.org/posting-guide.html__;!!KwNVnqRv!CHx9JKnbOObpAt0LltEogLSxDUEl9qJDI6FgqMJBG_kdRHAy8SJJdx6Uq0p4rpBa4E3DkmQ65UImH48MdYOqruE$ > >> > and provide commented, minimal, self-contained, reproducible code. > >> -- > >> John Fox, Professor Emeritus > >> McMaster University > >> Hamilton, Ontario, Canada > >> web: > >> https://urldefense.com/v3/__https://socialsciences.mcmaster.ca/jfox/__;!!KwNVnqRv!CHx9JKnbOObpAt0LltEogLSxDUEl9qJDI6FgqMJBG_kdRHAy8SJJdx6Uq0p4rpBa4E3DkmQ65UImH48MRU4wu3o$ > >> > >> > > [[alternative HTML version deleted]] > > __r-h...@r-project.org mailing > list -- To UNSUBSCRIBE and more, > seehttps://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help__;!!KwNVnqRv!CHx9JKnbOObpAt0LltEogLSxDUEl9qJDI6FgqMJBG_kdRHAy8SJJdx6U
Re: [R] Odd behavior of a function within apply
Dear Erin, The problem is that the data frame gets coerced to a character matrix, and the only column with "" entries is the 9th (the second one you supplied): as.matrix(test1.df) X1_1_HZP1 X1_1_HBM1_mon X1_1_HBM1_yr 1 "48160" "December""2014" 2 "48198" "June""2018" 3 "80027" "August" "2016" 4 "48161" ""NA 5 NA""NA 6 "48911" "August" "1985" 7 NA"April" "2019" 8 "48197" "February""1993" 9 "48021" ""NA 10 "11355" "December""1990" (Here, test1.df only contains the three columns you provided.) A solution is to use sapply: > sapply(test1.df, count1a) X1_1_HZP1 X1_1_HBM1_mon X1_1_HBM1_yr 2 3 3 I hope this helps, John On 2022-08-08 1:22 p.m., Erin Hodgess wrote: Hello! I have the following data.frame dput(test1.df[1:10,8:10]) structure(list(X1_1_HZP1 = c(48160L, 48198L, 80027L, 48161L, NA, 48911L, NA, 48197L, 48021L, 11355L), X1_1_HBM1_mon = c("December", "June", "August", "", "", "August", "April", "February", "", "December"), X1_1_HBM1_yr = c(2014L, 2018L, 2016L, NA, NA, 1985L, 2019L, 1993L, NA, 1990L)), row.names = c(NA, 10L), class = "data.frame") And the following function: dput(count1a) function (x) { if (typeof(x) == "integer") y <- sum(is.na(x)) if (typeof(x) == "character") y <- sum(x == "") return(y) } When I use the apply function with count1a, I get the following: apply(test1.df[1:10,8:10],2,count1a) X1_1_HZP1 X1_1_HBM1_mon X1_1_HBM1_yr NA 3NA However, when I do use columns 8 and 10, I get the correct response: apply(test1.df[1:10,c(8,10)],2,count1a) X1_1_HZP1 X1_1_HBM1_yr 23 I am really baffled. If I use count1a on a single column, it works fine. Any suggestions much appreciated. Thanks, Sincerely, Erin Erin Hodgess, PhD mailto: erinm.hodg...@gmail.com [[alternative HTML version deleted]] __ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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. -- John Fox, Professor Emeritus McMaster University Hamilton, Ontario, Canada web: https://socialsciences.mcmaster.ca/jfox/ __ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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] Odd behavior of a function within apply
Hello! I have the following data.frame dput(test1.df[1:10,8:10]) structure(list(X1_1_HZP1 = c(48160L, 48198L, 80027L, 48161L, NA, 48911L, NA, 48197L, 48021L, 11355L), X1_1_HBM1_mon = c("December", "June", "August", "", "", "August", "April", "February", "", "December"), X1_1_HBM1_yr = c(2014L, 2018L, 2016L, NA, NA, 1985L, 2019L, 1993L, NA, 1990L)), row.names = c(NA, 10L), class = "data.frame") And the following function: > dput(count1a) function (x) { if (typeof(x) == "integer") y <- sum(is.na(x)) if (typeof(x) == "character") y <- sum(x == "") return(y) } When I use the apply function with count1a, I get the following: apply(test1.df[1:10,8:10],2,count1a) X1_1_HZP1 X1_1_HBM1_mon X1_1_HBM1_yr NA 3NA However, when I do use columns 8 and 10, I get the correct response: apply(test1.df[1:10,c(8,10)],2,count1a) X1_1_HZP1 X1_1_HBM1_yr 23 > I am really baffled. If I use count1a on a single column, it works fine. Any suggestions much appreciated. Thanks, Sincerely, Erin Erin Hodgess, PhD mailto: erinm.hodg...@gmail.com [[alternative HTML version deleted]] __ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.