Wonderful, or the closest to heaven I've been the whole afternoon, but not quite there:
# begin code N <- 300 M <- 2 x <- matrix(data=rnorm(N*M, 0, 3)-10, ncol=M, nrow=N) y <- matrix(c(1,-2,-2,1), ncol=M, nrow=M) z <- data.frame(x %*% y) colnames(z) <- c('x','y') par(mfrow=c(1,3)) plot(z, pch=5, col="blue") whiten <- scale # no need to re-invent the wheel, I agree fc <- function(dfrm, coln) transform(dfrm, coln=whiten(dfrm[coln])) colxy <- "x" z1 <- fc(z, colxy) # the "[" function will interpret colxy colnames(z1) > [1] "x" "y" "x.1" fc <- function(dfrm, coln) transform(dfrm, coln=whiten(dfrm[,coln])) colxy <- "x" z2 <- fc(z, colxy) # the "[" function will interpret colxy colnames(z2) > [1] "x" "y" "coln" #end code What I want is to know whether I can customize the column name of the result of the transform() call. Your hint is fantastic, thanks there, but I keep getting into that particular pattern of computation over and over and I wonder if it's possible to skip a column clean-up after applying your trick. 2011/4/7 David Winsemius <dwinsem...@comcast.net>: > > On Apr 7, 2011, at 9:56 AM, Juan Carlos Borrás wrote: > >> Hi all, >> I am whitening my data: >> >> # code begins >> N <- 300 >> M <- 2 >> x <- matrix(data=rnorm(N*M, 0, 3)-10, ncol=M, nrow=N) >> y <- matrix(c(1,-2,-2,1), ncol=M, nrow=M) >> z <- data.frame(x %*% y) >> colnames(z) <- c('x','y') >> par(mfrow=c(1,3)) >> plot(z, pch=5, col="blue") >> >> whiten <- function(x) { (x-mean(x))/sd(x) } > > Consider: > > whiten <- scale # no need to re-invent the wheel > fc <- function(dfrm, coln) transform(dfrm, coln=whiten(dfrm[coln])) > colxy <- "x" > z <- fc(z, colxy) # the "[" function will interpret colxy > z > >> >> zz <- transform(z, x=whiten(x), y=whiten(y)) >> plot(zz, pch=3, col="red") >> >> #code ends >> >> And everything looks fine enough. >> But now I want to withen just one of the columns and I won't know >> which one until my script is running, hence I can't hard code it in >> the script. >> Then I though, well maybe if I define some convenient f... >> >> #begin code >> >> f <- function(a) { paste(a,"=withen(",a,")", sep='') } >> a <- 'x' # or a <- 'y' depending on user input..... >> f(a) >>> >>> [1] "x=withen(x)" >> >> # so I could try.... >> zzz <- transform(z, eval(f('x'))) >> # which of course doesn't work >> plot(zz, pch=3, col="green") >> >> head(z, n=2) >>> >>> x y >>> 1 17.167380 6.884402 >>> 2 8.234507 13.940932 >> >> head(zzz, n=2) >>> >>> x y >>> 1 17.167380 6.884402 >>> 2 8.234507 13.940932 >> >> #end code >> >> Could someone provide me with some hint on whether the attempted trick >> above is possible and how to proceed further? >> Thanks in advance. >> jcb! >> >> ______________________________________________ >> R-help@r-project.org mailing list >> 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. > > David Winsemius, MD > West Hartford, CT > > Cheers, jcb! ______________________________________________ R-help@r-project.org mailing list 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.