Hi Cecilia, Alternative solution
#... afiles <- ls(pattern= "a_") for (ifile in 1:length(afiles)) { fnp = mget(afiles[ifile]) #... do something with fnp outfile <- file.path("/Users/sisolarrosa/Documents/PhD/R_work/AF/IIC/conefor_inputs/", paste0("distances_", afiles[ifile], ".txt")); #... } cheers Peter > On 27 Jul 2015, at 12:50, Jim Lemon <drjimle...@gmail.com> wrote: > > Hi Cecilia, > I _think_ that the error is occurring in the call to paste0. You may > be able to get what you want like this: > > paste0("distances_",deparse(substitute(fnp)),".txt") > > Jim > > > On Mon, Jul 27, 2015 at 5:06 AM, Larrosa, Cecilia > <cecilia.larros...@imperial.ac.uk> wrote: >> Hi, >> >> This is a repost from here >> (http://r.789695.n4.nabble.com/Writing-output-of-a-looped-process-with-pdfs-tt4710348.html), >> due to the post not being complete originally. I am running R studio on OS >> X Yosemite 10.10.4 (Mac). I appreciate you help very much! >> >> The objective: I have 100 shapefiles that need to undergo the same process. >> >> The process: I use gDistance{rgdal} to calculate the distance between all >> features (polygons) within each layer, and output a txt file. >> >> The problem: I need the name of the output txt file to contain the name of >> the shapefile, but the shapefiles are read into R as >> SpatialPolygonsDataFrames (spdf) and I cannot find a way to use the name of >> the spdf objects as character in order to make it vary with each iteration. >> >> My questions to you: Do you know a way to solve the problem or an >> alternative way to fulfil the objective? I have come to determine the >> problem after searching about the error message, have I interpreted >> correctly? >> >> >> Here is a minimal dataset for replicability: >> >>> dput(a_1) >> new("SpatialPolygonsDataFrame" >> , data = structure(list(ID = 1:3, GRIDCODE = c(1L, 1L, 1L), Shape_Leng = >> c(3349.48347556, >> 1618.93904903, 893.268790786), Shape_Area = c(309430.38861, 90015.8325676, >> 47507.0325775), Count = c(1L, 1L, 1L)), .Names = c("ID", "GRIDCODE", >> "Shape_Leng", "Shape_Area", "Count"), row.names = 0:2, class = "data.frame") >> , polygons = list(<S4 object of class structure("Polygons", package = >> "sp")>, >> <S4 object of class structure("Polygons", package = "sp")>, >> <S4 object of class structure("Polygons", package = "sp")>) >> , plotOrder = 1:3 >> , bbox = structure(c(476685.625393809, 311791.86152084, 508519.585393809, >> 312935.41622084), .Dim = c(2L, 2L), .Dimnames = list(c("x", "y" >> ), c("min", "max"))) >> , proj4string = new("CRS" >> , projargs = "+proj=aea +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 >> +y_0=0 +ellps=aust_SA +units=m +no_defs" >> ) >> ) >>> dput(a_10) >> new("SpatialPolygonsDataFrame" >> , data = structure(list(ID = 1:5, GRIDCODE = c(1L, 1L, 1L, 1L, 1L), >> Shape_Leng = c(1691.7247095, >> 2305.45647624, 1022.64650591, 1172.27848042, 94.2722341164), >> Shape_Area = c(6.47354525991, 92111.8528756, 65.7173995386, >> 19042.7776647, 415.253663691), Count = c(1L, 1L, 1L, 1L, >> 1L)), .Names = c("ID", "GRIDCODE", "Shape_Leng", "Shape_Area", >> "Count"), row.names = 0:4, class = "data.frame") >> , polygons = list(<S4 object of class structure("Polygons", package = >> "sp")>, >> <S4 object of class structure("Polygons", package = "sp")>, >> <S4 object of class structure("Polygons", package = "sp")>, >> <S4 object of class structure("Polygons", package = "sp")>, >> <S4 object of class structure("Polygons", package = "sp")>) >> , plotOrder = c(2L, 4L, 5L, 3L, 1L) >> , bbox = structure(c(825796.904693809, 815666.86152084, 831270.106493809, >> 816562.46752084), .Dim = c(2L, 2L), .Dimnames = list(c("x", "y" >> ), c("min", "max"))) >> , proj4string = new("CRS" >> , projargs = "+proj=aea +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 >> +y_0=0 +ellps=aust_SA +units=m +no_defs" >> ) >> ) >> >> >> Here is the code that I have been using: >> >> ###Load packages >> library(rgdal) >> library(gdistance) >> >> ###Read forest shape files >> setwd("/Users/sisolarrosa/Documents/PhD/R_work/AF/IIC/R_Quest/") >> shps<- dir(getwd(), "*.shp") >> shps <- gsub('.{4}$', '', shps) >> for (shp in shps) assign(shp, readOGR(".",layer=shp)) >> >> ###Create list of spdf objects >> fnps<- mget(ls(pattern= "a_")) >> >> ###For each spatial layer (object in the list), calculate distance between >> all polygons within layer >> for (fnp in fnps) >> { >> distance.matrix<- gDistance(fnp, spgeom2= NULL, byid=T); >> row.names(distance.matrix) <- paste(1:nrow(distance.matrix), sep="”); >> # did this because gDistance changed the IDs of the features from [1 to >> ...] to [0 to ...], not sure why >> colnames(distance.matrix)<- paste(1:ncol(distance.matrix), sep="”); >> # same as above >> dists.melt <- >> melt(distance.matrix)[melt(upper.tri(distance.matrix))$value,]; #use only >> lower triangle of the distances matrix >> outfile <- >> file.path("/Users/sisolarrosa/Documents/PhD/R_work/AF/IIC/conefor_inputs/", >> paste0("distances_", fnp, ".txt")); >> write.table(dists.melt, outfile,row.names=FALSE, col.names=FALSE) >> } >> >> And this is the error message: >> >> Error in as.character.default(<S4 object of class >> "SpatialPolygonsDataFrame">) : >> no method for coercing this S4 class to a vector >> >> Thank you very much!! >> Cecilia >> >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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. > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.