[R] problem applying a conditional formula to each element of a matrix

jim holtman jholtman at gmail.com
Wed Dec 12 23:50:45 CET 2007


I think you want to use 'ifelse':

> Cov.f <- function(h, sigmasq, phi) {
+     ifelse(h <= phi, sigmasq * (1 - ( 1.5 * (h/phi)  - 0.5 * (h/phi)^3)), 0)
+ }
>
> x.coord <- c(5.7, 6.7, 9.8)
> y.coord <- c(42.7, 10.2, 77.4)
> coords <- cbind(x.coord, y.coord)
> distance.matrix <- as.matrix(dist(coords, method="euclidean"))
> distance.matrix
         1        2        3
1  0.00000 32.51538 34.94138
2 32.51538  0.00000 67.27146
3 34.94138 67.27146  0.00000
> Cov.f(distance.matrix, 3.9, 58.1)
          1         2         3
1 3.9000000 0.9678766 0.8059627
2 0.9678766 3.9000000 0.0000000
3 0.8059627 0.0000000 3.9000000
>

On Dec 12, 2007 1:35 PM, Dale Steele <dale.w.steele at gmail.com> wrote:
> I'm applying a function (Cov.f) defined below to each element of a
> distance matrix.  When I run the code below, I get a warning message
> (below) and elements of returned matrix [2,3] and [3,2] are not zero
> as I would expect. Clearly, there is an error... What am I doing
> wrong? Thanks.  --Dale
>
> Warning message:
> In if (h <= phi) { :
>  the condition has length > 1 and only the first element will be used
>
> # function
>
> Cov.f <- function(h, sigmasq, phi) {
>  if (h <= phi) {Cij <- sigmasq * (1 - ( 1.5 * (h/phi)  - 0.5 *
> (h/phi)^3))  } else
>  if (h > phi)  {Cij <- 0}
>  return(Cij)
>      }
>
> x.coord <- c(5.7, 6.7, 9.8)
> y.coord <- c(42.7, 10.2, 77.4)
> coords <- cbind(x.coord, y.coord)
> distance.matrix <- as.matrix(dist(coords, method="euclidean"))
> distance.matrix
> Cov.f(distance.matrix, 3.9, 58.1)
>
> ______________________________________________
> R-help at r-project.org 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.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem you are trying to solve?



More information about the R-help mailing list