[R] How to pass na.rm=T to a user defined function

Jun Shen jun.shen.ut at gmail.com
Fri Jul 29 02:51:47 CEST 2016


Dear list,

I write a small function to calculate multiple stats on multiple variables
and export in a format exactly the way I want. Everything seems fine until
NA appears in the data.

Here is my function:

do.stats <- function(data, stats.func, summary.var)
            as.data.frame(signif(sapply(stats.func,function(func)
mapply(func,data[summary.var])),3))

A test dataset:
test <-
data.frame(ID=1:100,CL=rnorm(100),V1=rnorm(100),V2=rnorm(100),ALPHA=rnorm(100))

a command like the following
do.stats(test, stats.func=c('mean','sd','median','min','max'),
summary.var=c('CL','V1', 'V2','ALPHA'))

gives me

         mean    sd  median   min  max
CL     0.1030 0.917  0.0363 -2.32 2.47
V1    -0.0545 1.070 -0.2120 -2.21 2.70
V2     0.0600 1.000  0.0621 -2.80 2.62
ALPHA -0.0113 0.919  0.0284 -2.35 2.31


However if I have a NA in the data
test$CL[1] <- NA

The same command run gives me
         mean    sd  median   min  max
CL        * NA    NA      NA    NA   NA*
V1    -0.0545 1.070 -0.2120 -2.21 2.70
V2     0.0600 1.000  0.0621 -2.80 2.62
ALPHA -0.0113 0.919  0.0284 -2.35 2.31

I know this is because those functions (mean, sd etc.) all have
na.rm=F by default. How can I

pass na.rm=T to all these functions without manually redefining those
stats functions

Appreciate any comment.

Thanks for your help.


Jun

	[[alternative HTML version deleted]]



More information about the R-help mailing list