problem applying a conditional formula to each element of a matrix
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?