Hi all I know I probably reinvented wheel but it was maybe simpler then search in docs or ask help before I did my part. I made a simple function which can scale a vector between chosen values. Do anybody know simpler/better approach? myscale<-function(x, miny=0.5, maxy=1) { rx <- diff(range(x, na.rm=T)) minx <- min(x, na.rm=T) tga <- (maxy-miny)/rx b <- miny - tga* minx res <- x*tga+b res } x <- c(5,30,50) myscale(x) [1] 0.5000000 0.7777778 1.0000000 Thank you Regards Petr
Perhaps approx: approx(range(x), c(0.5, 1), xout = x)$y A one-linear, but longer, is also possible based on lm: predict(lm(c(0.5, 1) ~ x, data.frame(x = range(x))), data.frame(x)) On Mon, Mar 8, 2010 at 9:37 AM, Petr PIKAL <petr.pikal at precheza.cz> wrote:> Hi all > > I know I probably reinvented wheel but it was maybe simpler then search in > docs or ask help before I did my part. > > I made a simple function which can scale a vector between chosen values. > Do anybody know simpler/better approach? > > myscale<-function(x, miny=0.5, maxy=1) { > rx <- diff(range(x, na.rm=T)) > minx <- min(x, na.rm=T) > tga <- (maxy-miny)/rx > b <- miny - tga* minx > res <- x*tga+b > res > } > > x <- c(5,30,50) > > myscale(x) > [1] 0.5000000 0.7777778 1.0000000 > > Thank you > > Regards > Petr > > ______________________________________________ > R-help at 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. >
Thanks I would never deduct it out from the help page of approx. Regards Petr r-help-bounces at r-project.org napsal dne 08.03.2010 15:47:37:> Perhaps approx: > > approx(range(x), c(0.5, 1), xout = x)$y > > A one-linear, but longer, is also possible based on lm: > > predict(lm(c(0.5, 1) ~ x, data.frame(x = range(x))), data.frame(x)) > > > On Mon, Mar 8, 2010 at 9:37 AM, Petr PIKAL <petr.pikal at precheza.cz>wrote:> > Hi all > > > > I know I probably reinvented wheel but it was maybe simpler thensearch in> > docs or ask help before I did my part. > > > > I made a simple function which can scale a vector between chosenvalues.> > Do anybody know simpler/better approach? > > > > myscale<-function(x, miny=0.5, maxy=1) { > > rx <- diff(range(x, na.rm=T)) > > minx <- min(x, na.rm=T) > > tga <- (maxy-miny)/rx > > b <- miny - tga* minx > > res <- x*tga+b > > res > > } > > > > x <- c(5,30,50) > > > > myscale(x) > > [1] 0.5000000 0.7777778 1.0000000 > > > > Thank you > > > > Regards > > Petr > > > > ______________________________________________ > > R-help at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code. > > > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.
On 03/09/2010 01:37 AM, Petr PIKAL wrote:> Hi all > > I know I probably reinvented wheel but it was maybe simpler then search in > docs or ask help before I did my part. > > I made a simple function which can scale a vector between chosen values. > Do anybody know simpler/better approach? > ... > x<- c(5,30,50) > > myscale(x) > [1] 0.5000000 0.7777778 1.0000000Hi Petr, Try this: library(plotrix) rescale(x,c(0.5,1)) Jim