Hi all,
I am trying to run a for loop 1000 times to randomly sample spatial points
and then pass these coordinates to the kde function in the 'ks' package.
When I look at the output from the random selection of points that code
seems to be working fine (i.e. each iteration of the for loop produces
different values). However, when I look at the results from the kde function
the first two outputs are different and then each iteration after that just
produces the exact same values. I've posted a simplified example of my code
(simulating data instead of running through the random selection process)
but it produces the same errors when I look at the results. I'm sure I'm
missing something really obvious I'm just not sure where to look.
Many thanks
Code:
library(ks)
setwd("/Users/kalee/Documents/Feb 2013/")
for (i in 1:5 ) {
x <- sample(-300:250, 100, replace = TRUE)
y <- sample(-30:50, 100, replace = TRUE)
xy <- cbind(x, y)
ID <- sample(1:22, 100, replace = TRUE)
dat <- as.data.frame(cbind(ID, xy))
set.seed(8192)
dat$X2 <- jitter(dat$x)
dat$Y2 <- jitter(dat$y)
idh <- split(dat, list(dat$ID), drop = TRUE)
y <- lapply(idh, "[", c('X2','Y2'))
x <- Filter(function (t) nrow(unique(t)) > 5, y)
myfun1<- function(x, k) {
H.s <- Hpi(x[[k]], binned = TRUE)
KDE <- kde(x[[k]], H=H.s, binned = TRUE)
cont <- contourSizes(KDE, cont = c(95), approx = TRUE)
return(cont)
}
results95 <- rep(0, length(unique(x)))
for (j in 1:length(results95)) results95[j] <- myfun1(x, j)
z <- as.matrix(x)
m <- dimnames(z)
l <-list(m[[1]], results95)
write.csv(l, file = paste("blues_function test",i,".csv"))
}
Example of results:
Iteration 1:
1 1 22659.13004
2 2 26688.41093
3 3 19403.62449
4 4 26710.38738
5 9 18968.71687
6 11 31870.62336
7 19 11019.08475
8 22 4163.867828
Iteration 2:
1 3 34613.00041
2 4 32962.57106
3 8 21379.64701
4 12 29499.05166
5 14 12065.95155
6 16 26973.81732
7 18 23929.58449
Iteration 3 onwards:
1 3 34613.00041
2 4 32962.57106
3 8 21379.64701
4 12 29499.05166
5 14 12065.95155
6 16 26973.81732
7 18 23929.58449
--
View this message in context: http://r-sig-geo.2731867.n2.nabble.com/for-loop-with-kde-ks-package-function-not-working-tp7582943.html
Sent from the R-sig-geo mailing list archive at Nabble.com.
for loop with kde (ks package) function not working
2 messages · kalee, Forrest Stevens
I am trying to run a for loop 1000 times to randomly sample spatial points
...
different values). However, when I look at the results from the kde function the first two outputs are different and then each iteration after that just produces the exact same values.
Hi Kathryn, I believe the problem you're facing is that you are setting the random seed each time through your loop, which effectively resets the random number generation to the same point, and therefore duplicates your random sample each time. The key is to move the set.seed() call outside your for() loop. Hopefully that solves it for you, Forrest
Code:
library(ks)
setwd("/Users/kalee/Documents/Feb 2013/")
set.seed(8192)
for (i in 1:5 ) {
x <- sample(-300:250, 100, replace = TRUE)
y <- sample(-30:50, 100, replace = TRUE)
xy <- cbind(x, y)
ID <- sample(1:22, 100, replace = TRUE)
dat <- as.data.frame(cbind(ID, xy))
dat$X2 <- jitter(dat$x)
dat$Y2 <- jitter(dat$y)
idh <- split(dat, list(dat$ID), drop = TRUE)
y <- lapply(idh, "[", c('X2','Y2'))
x <- Filter(function (t) nrow(unique(t)) > 5, y)
myfun1<- function(x, k) {
H.s <- Hpi(x[[k]], binned = TRUE)
KDE <- kde(x[[k]], H=H.s, binned = TRUE)
cont <- contourSizes(KDE, cont = c(95), approx = TRUE)
return(cont)
}
results95 <- rep(0, length(unique(x)))
for (j in 1:length(results95)) results95[j] <- myfun1(x, j)
z <- as.matrix(x)
m <- dimnames(z)
l <-list(m[[1]], results95)
write.csv(l, file = paste("blues_function test",i,".csv"))
}
Ph.D. Candidate, QSE3 IGERT Fellow Department of Geography Land Use and Environmental Change Institute University of Florida www.clas.ufl.edu/users/forrest