Re: [R] Odd behavior of a function within apply

2022-08-09 Thread Erin Hodgess
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

2022-08-09 Thread David Carlson via R-help
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

2022-08-08 Thread John Fox

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

2022-08-08 Thread Erin Hodgess
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.