Don't use assign(), named lists are much better (check the stuff on
indexing lists). Here's an example:
a <- list()
a[["one"]] <- c(1,2,3)
a[["two"]] <- c(4,5,6)
a[["two"]]
do.call("rbind",a)
do.call("cbind",a)
lapply(a,sum)

With regards to your question, did you try printing varname[i] in your
loop to see which value causes the error message?


> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of Koen Hufkens
> Sent: Wednesday, November 23, 2005 7:37 AM
> To: R help mailinglist
> Subject: [R] assign() problem
>
>
> I've written a piece of code (see below) to do a wavelet image
> decomposition, during  the evaluation of this code I would
> like to write
> the results of some calculations back to the R root directory. I used
> assign() to do so because the names should vary when going thrue a
> while() loop. For some unknown reason I get an error that says:
>
> Error in assign(varname[i], imwrImage) :
>          invalid first argument
>
> what could be wrong, when I do it on the commandline everything works
> out just fine. But within the function it doesn't. When I disable the
> assign statement, everything runs fine so the rest of the
> code should be
> clean.
>
> My code:
>
> # Wavelet multiresolution decomposition
>
> wmra <- function(image_file){
> #require(rimage)
> require(wavethresh)
>
> #reading image file and converting it to grayscale
> #dimage <- read.jpeg(image_file)
> #dimage <- imagematrix(dimage)
>
> # discrete wavelet decomposition
> imwdImage <- imwd(image_file)
>
> # get a value for the number of decomposition levels
> #nlevels <- imwdImage$nlevels
>
> i <- 0
> varname <- paste("level",0:(imwdImage$nlevels-1),sep="")
> print(varname)
> while ( i < imwdImage$nlevels)
>        {
>       
>        # set the threshold to 0 on all levels except the one
> in evaluation
>        # thresholdLevels is the list of levels to set to zero
>        thresholdLevels <- 1:(imwdImage$nlevels-1)
>        thresholdLevels[i] <- 0
>        thresholdedCoeff <-
> threshold.imwd(imwdImage,levels=thresholdLevels,
> policy=c("manual"), type="hard", value=10000)
>       
>           # calculate the inverse wavelet transform
>        imwrImage <- imwr(thresholdedCoeff)
>
>        # assign the various decomposition level data a name
>        # starting at i+1 because i = 0.
>           assign(varname[i+1],imwrImage) #  --> gives an error
>               
>        # export the multiresolution decomposition for level i as graph
>        jpeg(paste("level",i,".jpg",sep=""),quality=100)       
>        image(imwrImage,xlab=c("MRA image of level:
> ",i),col=gray(255:0/256))
>        dev.off()
>                       
>        i <- i + 1
>         }
>
> }
>
> Best regards, Koen
>
> ______________________________________________
> R-help@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html
>

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to