I have a need to find the order of number to get a scaling parameter as a power of 10. I have a function that works *so far*, but it is ugly and probably buggy. In the interest of avoiding code-based outliers in my data, I thought I would ask if anyone here has a better way.> scl <- function(x){+ length(charToRaw(format(trunc(x), scientific = F)))-1}> a <- 123456789 > b <- 1E15 > c <- 12.345 > scl(a)[1] 8> scl(b)[1] 15> scl(c)[1] 1 Thanks -------------------------------------- Jonathan P. Daily Technician - USGS Leetown Science Center 11649 Leetown Road Kearneysville WV, 25430 (304) 724-4480 "Is the room still a room when its empty? Does the room, the thing itself have purpose? Or do we, what's the word... imbue it." - Jubal Early, Firefly
On Dec 7, 2010, at 2:43 PM, Jonathan P Daily wrote:> I have a need to find the order of number to get a scaling parameter > as a > power of 10. I have a function that works *so far*, but it is ugly and > probably buggy. In the interest of avoiding code-based outliers in my > data, I thought I would ask if anyone here has a better way. > >> scl <- function(x){ > + length(charToRaw(format(trunc(x), scientific = F)))-1} >> a <- 123456789 >> b <- 1E15 >> c <- 12.345 >> scl(a) > [1] 8 >> scl(b) > [1] 15 >> scl(c) > [1] 1scl<- function(x) trunc(log(x,10)) > scl(a) [1] 8 > > scl(b) [1] 15 > > scl(c) [1] 1 Seems mathematically clearer. -- David Winsemius, MD West Hartford, CT
Jonathan, I'd just return the integer part of the common log: floor(log10(x)) Dave From: Jonathan P Daily <jdaily@usgs.gov> To: r-help@r-project.org Date: 12/07/2010 01:44 PM Subject: [R] More elegant magnitude method Sent by: r-help-bounces@r-project.org I have a need to find the order of number to get a scaling parameter as a power of 10. I have a function that works *so far*, but it is ugly and probably buggy. In the interest of avoiding code-based outliers in my data, I thought I would ask if anyone here has a better way.> scl <- function(x){+ length(charToRaw(format(trunc(x), scientific = F)))-1}> a <- 123456789 > b <- 1E15 > c <- 12.345 > scl(a)[1] 8> scl(b)[1] 15> scl(c)[1] 1 Thanks -------------------------------------- Jonathan P. Daily Technician - USGS Leetown Science Center 11649 Leetown Road Kearneysville WV, 25430 (304) 724-4480 "Is the room still a room when its empty? Does the room, the thing itself have purpose? Or do we, what's the word... imbue it." - Jubal Early, Firefly ______________________________________________ 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. [[alternative HTML version deleted]]
Jonathan -
If I understand correctly,
max(0,floor(log(x,10)))
will return the value you want.
- Phil Spector
Statistical Computing Facility
Department of Statistics
UC Berkeley
spector at stat.berkeley.edu
On Tue, 7 Dec 2010, Jonathan P Daily wrote:
> I have a need to find the order of number to get a scaling parameter as a
> power of 10. I have a function that works *so far*, but it is ugly and
> probably buggy. In the interest of avoiding code-based outliers in my
> data, I thought I would ask if anyone here has a better way.
>
>> scl <- function(x){
> + length(charToRaw(format(trunc(x), scientific = F)))-1}
>> a <- 123456789
>> b <- 1E15
>> c <- 12.345
>> scl(a)
> [1] 8
>> scl(b)
> [1] 15
>> scl(c)
> [1] 1
>
> Thanks
> --------------------------------------
> Jonathan P. Daily
> Technician - USGS Leetown Science Center
> 11649 Leetown Road
> Kearneysville WV, 25430
> (304) 724-4480
> "Is the room still a room when its empty? Does the room,
> the thing itself have purpose? Or do we, what's the word... imbue
it."
> - Jubal Early, Firefly
>
> ______________________________________________
> 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.
>