[R] Sum function and missing values --- need to mimic SAS sum function
Sven E. Templer
sven.templer at gmail.com
Tue Jan 27 14:23:39 CET 2015
Maybe this is due to the usage of rep() in ifelse():
f.rep <- function(ans){ans <- rep(ans,1);return(ans)}
f <- function(ans){return(ans)}
f(a <- 123) # no print here
f.rep(a <- 123) # prints:
# [1] 123
On 27 January 2015 at 11:54, Bert Gunter <gunter.berton at gene.com> wrote:
> Huh??
>
>> ifelse(TRUE, a <- 2L, a <- 3L)
> [1] 2
>> a
> [1] 2
>
> Please clarify.
>
> -- Bert
>
> Bert Gunter
> Genentech Nonclinical Biostatistics
> (650) 467-7374
>
> "Data is not information. Information is not knowledge. And knowledge
> is certainly not wisdom."
> Clifford Stoll
>
>
>
>
> On Mon, Jan 26, 2015 at 2:22 PM, Hervé Pagès <hpages at fredhutch.org> wrote:
>> Hi Martin,
>>
>> On 01/26/2015 04:45 AM, Martin Maechler wrote:
>>>>>>>>
>>>>>>>> Jim Lemon <drjimlemon at gmail.com>
>>>>>>>> on Mon, 26 Jan 2015 11:21:03 +1100 writes:
>>>
>>>
>>> > Hi Allen, How about this:
>>>
>>> > sum_w_NA<-function(x) ifelse(all(is.na(x)),NA,sum(x,na.rm=TRUE))
>>>
>>> Excuse, Jim, but that's yet another "horrible misuse of ifelse()"
>>>
>>> John Fox's reply *did* contain the "proper" solution
>>>
>>> if (all(is.na(x))) NA else sum(x, na.rm=TRUE)
>>>
>>> The ifelse() function should never be used in such cases.
>>> Read more after googling
>>>
>>> "Do NOT use ifelse()"
>>>
>>> -- include the quotes in your search --
>>>
>>> or directly at
>>> http://stat.ethz.ch/pipermail/r-help/2014-December/424367.html
>>
>>
>> Interesting. You could have added the following item to your list:
>>
>> 4. less likely to play strange tricks on you:
>>
>> > ifelse(TRUE, a <- 2L, a <- 3L)
>> [1] 2
>> > a
>> [1] 3
>>
>> Yeah I've seen people using ifelse() that way and being totally
>> confused...
>>
>> Cheers,
>> H.
>>
>>>
>>> Yes, this has been on R-help a month ago..
>>> Martin
>>>
>>> > On Mon, Jan 26, 2015 at 10:21 AM, Allen Bingham
>>> > <aebingham2 at gmail.com> wrote:
>>> >> I understand that in order to get the sum function to
>>> >> ignore missing values I need to supply the argument
>>> >> na.rm=TRUE. However, when summing numeric values in which
>>> >> ALL components are "NA" ... the result is 0.0 ... instead
>>> >> of (what I would get from SAS) of NA (or in the case of
>>> >> SAS ".").
>>> >>
>>> >> Accordingly, I've had to go to 'extreme' measures to get
>>> >> the sum function to result in NA if all arguments are
>>> >> missing (otherwise give me a sum of all non-NA elements).
>>> >>
>>> >> So for example here's a snippet of code that ALMOST does
>>> >> what I want:
>>> >>
>>> >>
>>> >>
>>> SumValue<-apply(subset(InputDataFrame,!is.na(Variable.1)|!is.na(Variable.2),
>>> >> select=c(Variable.1,Variable.2)),1,sum,na.rm=TRUE)
>>> >>
>>> >> In reality this does NOT give me records with NA for
>>> >> SumValue ... but it doesn't give me values for any
>>> >> records in which both Variable.1 and Variable.2 are NA
>>> >> --- which is "good enough" for my purposes.
>>> >>
>>> >> I'm guessing with a little more work I could come up with
>>> >> a way to adapt the code above so that I could get it to
>>> >> work like SAS's sum function ...
>>> >>
>>> >> ... but before I go that extra mile I thought I'd ask
>>> >> others if they know of functions in either base R ... or
>>> >> in a package that will better mimic the SAS sum function.
>>> >>
>>> >> Any suggestions?
>>> >>
>>> >> Thanks. ______________________________________ Allen
>>> >> Bingham aebingham2 at gmail.com
>>> >>
>>> >> ______________________________________________
>>> >> R-help at 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-help at 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-help at 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.
>>>
>>
>> --
>> Hervé Pagès
>>
>> Program in Computational Biology
>> Division of Public Health Sciences
>> Fred Hutchinson Cancer Research Center
>> 1100 Fairview Ave. N, M1-B514
>> P.O. Box 19024
>> Seattle, WA 98109-1024
>>
>> E-mail: hpages at fredhutch.org
>> Phone: (206) 667-5791
>> Fax: (206) 667-1319
>>
>> ______________________________________________
>> R-help at 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-help at 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.
More information about the R-help
mailing list