Dear Adehabitat Gurus, I am bringing up a subject I posed a few months ago because it keeps creating problems for me.
http://lists.faunalia.it/pipermail/animov/2009-July/000441.html I work on fish that swim into little bays and around points of land, and my home range calculations always include land area as part of the home range. I have been using qGIS to remove the land area, but I am now trying to look at changes in home range size as sample size increases. Easy to do normally, but not when I have to manually clip the land out. I came up with an easy way to do it using setdiff() from the gpclib package. I have detailed shapefiles of the land which I convert to gpc polygons, then use setdiff() to remove the land from the gpc polygons created by the home range fuctions. While this works, I am trying to write a more general function that will replace the date from the original home range object with the clipped data so that it is compatible with other functions in Adehabitat. I am currently working on the NNCH home range function since that is what I am using on my current project. I am having a problem replacing the area in the NNCH object with the new area for the home range isopleths. I think this is simply due to my lack of understanding of how lists work, and would appreciate your help. The problem line that I think is needed is commented out(homerange[[kk]]$area[[i,]]<-area). Below is the function and example data. I have used the chamois dataset and created a gpc polygon called "BigLake" to represent an uninhabitable area for goats. Thanks for your help and suggestions, Tim #Input NNCH homerange, a GPC Polygon of area to cut, and other stuff cut.NNCH<-function (x=hr, GPC.poly=BigMountain, percent = rev(seq(10,100, by = 10)), id = NULL, k = NULL, r = NULL, a = NULL, ...) { if (!inherits(x, "NNCH")) stop("x should be of class \"NNCH\"") if (!require(sp)) stop("package sp required") if (!require(gpclib)) stop("package gpclib required") e <- NULL percent <- rev(vectorize.parameter(percent)) homerange <- NNCH.select(x, id = id, k = k, a = a, r = r) for (kk in names(homerange)) { polys <- homerange[[kk]]$polygons for (i in 1:length(percent)) { isoIndex <- NNCH.iso.index(homerange[[kk]], percent[i]) if (is.integer(isoIndex)) { NNCH.poly<-polys[[isoIndex]] cut.poly<-setdiff(NNCH.poly,GPC.poly) homerange[[kk]]$polygons[[isoIndex]]<-cut.poly ar<-area.poly(homerange[[kk]]$polygons[[isoIndex]]) area<-data.frame(levels=names(polys)[isoIndex],area=ar) #homerange[[kk]]$area[[i,]]<-area } } } return(homerange) } #Example data library(adehabitat) data(chamois) xy <- chamois$locs hr <- NNCH(xy, k = c(12,14)) plot(hr) BigLake <- cbind(c(865000,870000,870000,865000),c(2045000,2045000,2050000,2050000)) BigLake <- as(BigLake[chull(BigLake), ], "gpc.poly") plot(BigLake,add=TRUE) #Run function new.range<-cut.NNCH(x=hr,GPC.poly=BigLake) plot(new.range) Tim Clark Department of Zoology University of Hawaii _______________________________________________ AniMov mailing list [email protected] http://lists.faunalia.it/cgi-bin/mailman/listinfo/animov
