Integrate na.rm in own defined functions

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Integrate na.rm in own defined functions

Mauro
It`s probably an easy question, but couldn`t figure it out.

I`ve defined a function like:

rmse<-function (x){
dquared<-x^2
sum1<-sum(x^2)
rmse<-sqrt((1/length(x))*sum1)
rmse}

My problem is, that I have NA Values in x and the above function returns NA.

I`m looking for a way to use "na.rm=TRUE" like in for instance mean(x,na.rm=TRUE).

Does anybody know how to do this?


Thank you very much.

Mauro
Reply | Threaded
Open this post in threaded view
|

Re: Integrate na.rm in own defined functions

vioravis
This should work!!

rmse<-function (x){
dquared<-x^2
sum1<-sum(x^2,na.rm=TRUE)
rmse<-sqrt((1/length(x))*sum1)
rmse}

Reply | Threaded
Open this post in threaded view
|

Re: Integrate na.rm in own defined functions

Alexander Engelhardt
In reply to this post by Mauro
Am 20.04.2011 10:59, schrieb Mauro:

> It`s probably an easy question, but couldn`t figure it out.
>
> I`ve defined a function like:
>
> rmse<-function (x){
> dquared<-x^2
> sum1<-sum(x^2)
> rmse<-sqrt((1/length(x))*sum1)
> rmse}
>
> My problem is, that I have NA Values in x and the above function returns NA.
>
> I`m looking for a way to use "na.rm=TRUE" like in for instance
> mean(x,na.rm=TRUE).

If you had no sum function to give the "na.rm=TRUE" parameter, you can
add the tiny line to your code:
x <- x[!is.na(x)]

Or give your function a na.rm parameter yourself:

rmse<-function (x, na.rm=FALSE){

if(na.rm==TRUE){
  x <- x[!is.na(x)]
}

  dquared<-x^2
  sum1<-sum(x^2)
  rmse<-sqrt((1/length(x))*sum1)
  rmse
}

______________________________________________
[hidden email] mailing list
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.
Reply | Threaded
Open this post in threaded view
|

Re: Integrate na.rm in own defined functions

Rolf Turner-3
In reply to this post by vioravis
On 20/04/11 22:25, vioravis wrote:
> This should work!!
>
> rmse<-function (x){
> dquared<-x^2
> sum1<-sum(x^2,na.rm=TRUE)
> rmse<-sqrt((1/length(x))*sum1)
> rmse}

Shouldn't the divisor be the number of non-missing values in x?
Rather than the length of x?  (Like, e.g. sum(!is.na(x)) ?)

     cheers,

         Rolf Turner

______________________________________________
[hidden email] mailing list
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.