[R] Novice programing question

Bill.Venables at csiro.au Bill.Venables at csiro.au
Thu Oct 25 04:18:42 CEST 2007

?var points out that "var is another interface to cov", i.e. it
calculates (possibly part of) the "variance" matrix.  In the simplest
special case y = x and you get the entire variance matrix, or just the
sample variance if x is a simple vector, as in your case.

BTW you little function is a bit more complicated than it need be, isn't

>  my.var <- function(x) sum((x-mean(x))^2)/(length(x)-1)

would do the same job with many fewer parentheses.... 

Bill Venables
CSIRO Laboratories
PO Box 120, Cleveland, 4163
Office Phone (email preferred): +61 7 3826 7251
Fax (if absolutely necessary):  +61 7 3826 7304
Mobile:                         +61 4 8819 4402
Home Phone:                     +61 7 3286 7700
mailto:Bill.Venables at csiro.au

-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
On Behalf Of Ista Zahn
Sent: Thursday, 25 October 2007 11:35 AM
To: r-help at r-project.org
Subject: [R] Novice programing question

Hi all,
I apologize for the ignorance implicit in this question, but I'm  
having a hard time figuring out how R functions work. For example, if  
I wanted to write a function to compute a variance, I would do  
something like

 >my.var <- function(x) (sum(((x-mean(x)))^2))/(length(((x-mean(x))) 

And this seems to work, e.g.,

 > my.var(V1)
[1] 116.1
 > var(V1)
[1] 116.1

But when I try to see what the built-in var function does I get

 > var
function (x, y = NULL, na.rm = FALSE, use)
     if (missing(use))
         use <- if (na.rm)
         else "all.obs"
     na.method <- pmatch(use, c("all.obs", "complete.obs",  
     if (is.data.frame(x))
         x <- as.matrix(x)
     else stopifnot(is.atomic(x))
     if (is.data.frame(y))
         y <- as.matrix(y)
     else stopifnot(is.atomic(y))
     .Internal(cov(x, y, na.method, FALSE))
<environment: namespace:stats>

Being a novice, I can't understand what this means. I only have one  
variable, yet the code seems to be based on the covariance between x  
and y. What is y? Sorry for such a stupid question. I am just trying  
to figure out how R does things, and I can't seem to get my head  
around it. Thank you for your patience.

-Ista Zahn

R-help at r-project.org mailing list
PLEASE do read the posting guide
and provide commented, minimal, self-contained, reproducible code.

More information about the R-help mailing list