Narayani, This works for me:

library(dismo)  # for the example data
fnames <- list.files(path=paste(system.file(package="dismo"), '/ex',
sep=''), pattern='grd', full.names=TRUE )

BioStack <- stack(fnames)
BioPt1 = na.omit(rasterToPoints(BioStack))
pcaPt1 = princomp(BioPt1[,-c(1:2)], cor = "TRUE")
pcaScores = pcaPt1$scores
d1 = dim(pcaScores)
for ( i in 1:d1[2]) {
      print(paste("Writing principal component file ", i ), sep = " ")
      tbl1 = cbind(BioPt1[,1:2], pcaScores[,i])
      r2 = rasterFromXYZ(tbl1,digits=5)
      FileName = paste("Comp",i,".asc", sep = "")
      writeRaster(r2,FileName)
}


# Alternatively

library(dismo)
fnames <- list.files(path=paste(system.file(package="dismo"), '/ex',
sep=''), pattern='grd', full.names=TRUE )
BioStack <- stack(fnames)
BioPt1 = na.omit(rasterToPoints(BioStack))
pcaPt1 = princomp(BioPt1[,-c(1:2)], cor = "TRUE")
pcaScores = pcaPt1$scores
b <- brick(BioStack, nl=ncol(pcaScores))
cells <- cellFromXY(BioStack, BioPt1[,1:2])
m <- matrix(NA, ncol=nlayers(b), nrow=ncell(b))
colnames(m) <- colnames(pcaScores)
m[cells, ] <- pcaScores
b <- setValues(b, m)


Hth, Robert

On Thu, Jan 10, 2013 at 12:32 PM, Narayani Barve <narayani@ku.edu> wrote:

> I use following function to generate the stack from .asc files.
>
> library(raster)
> MakeStack <- function(Prompt)
> {
>    Mfiles = choose.files(caption=Prompt)
>    for (i in 1: length(Mfiles))
>    {
>       fl1 = raster(Mfiles[i])
>           if (i == 1)
>           {
>              stk = stack(fl1)
>           }
>           else
>           {
>              stk = stack(stk, fl1)
>           }
>
>    }
>    return(stk)
> }
>
> Regards,
> Narayani
>
> On Thu, Jan 10, 2013 at 2:05 PM, Etienne B. Racine <etiennebr@gmail.com>
> wrote:
> > What code are you using to read your stack ?
> >
> > Try this as a stack (from stack example)
> > library(raster)
> > fn <- system.file("external/test.grd", package="raster")
> > s <- stack(fn, fn, fn)
> > BioStack = s
> >
> > And then run the rest of your code.
> > Etienne
> >
> >
> > 2013/1/10 Michael Sumner <mdsumner@gmail.com>
> >>
> >> Regular is different to square, and ESRI ASCII is not XYZ. I suspect you
> >> should just read it with raster().
> >>
> >> HTH
> >>
> >> On Friday, January 11, 2013, Narayani Barve wrote:
> >>
> >> > Hi All,
> >> >
> >> > I have ESRI ASCII grid format files. I want to apply principal
> >> > component on those files and then save those PCA components into ASCII
> >> > grid format. I used raster package to perform this operation. My steps
> >> > are
> >> > 1. Read ASCII file, and make stack
> >> > 2. Use rasterToPoints function to get the matrix to be used for PCA
> >> > 3. use princomp function on the generated table above.
> >> > 4. extract the scores from pca output.
> >> > 5. convert the score of each component to table of 3 columns
> (x,y,comp)
> >> > 6. use rasterFromXYZ function to convert the component to raster
> >> > 7. Save the raster object to ASCII grid.
> >> >
> >> > The trouble is I am receiving error at step 6, for rasterFromXYZ
> >> > function. It says "Error in rasterFromXYZ(tbl2) : y cell sizes are not
> >> > regular"
> >> > I checked the cell sizes for both x and y, to be sure. It is square. I
> >> > also tried supplying, digits=5 argument, but no use. I am not able
> >> > tease out the error. Am I doing anything wrong? The written code is
> >> > below. I cannot supply with the files, as these files are huge.
> >> >
> >> >    BioStack = MakeStack("Select ASCII files :")
> >> >    BioPt1 = rasterToPoints(BioStack)
> >> >    print("Generating principal component")
> >> >    pcaPt1 = princomp(BioPt1[,3:dim(BioPt1)[2]], cor = "TRUE")
> >> >    pcaScores = pcaPt1$scores
> >> >    d1 = dim(pcaScores)
> >> >    for ( i in 1:d1[2])
> >> >    {
> >> >       print(paste("Writing principal component file ", i ), sep = " ")
> >> >       tbl1 = cbind(BioPt1[,1:2], pcaScores[,i])
> >> >       r2 = rasterFromXYZ(tbl1,digits=5)
> >> >       FileName = paste("Comp",i,".asc", sep = "")
> >> >       writeRaster(r2,FileName)
> >> >    }
> >> >
> >> >
> >> > Thank you in advance and any help is appreciated.
> >> >
> >> > Narayani
> >> >
> >> >
> >> > -
> >
>

	[[alternative HTML version deleted]]

