Re: [R] Format wanted...
On 12-03-24 10:47 PM, J Toll wrote: On Sat, Mar 24, 2012 at 7:30 PM, Duncan Murdoch murdoch.dun...@gmail.com wrote: Do we have a format that always includes a decimal point and a given number of significant digits, but otherwise drops unnecessary characters? For example, if I wanted 5 digits, I'd want the following: Round to 5 digits: 1.234567 - 1.2346 Drop unnecessary zeros: 1.23 - 1.23 Force inclusion of a decimal point: 1 - 1. Duncan, Maybe sprintf() will work for you. As it's a wrapper for C sprintf, it should have its functionality. Maybe, but with which format string? Duncan Murdoch __ 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.
Re: [R] Format wanted...
On Mar 25, 2012, at 7:14 AM, Duncan Murdoch wrote: On 12-03-24 10:47 PM, J Toll wrote: On Sat, Mar 24, 2012 at 7:30 PM, Duncan Murdoch murdoch.dun...@gmail.com wrote: Do we have a format that always includes a decimal point and a given number of significant digits, but otherwise drops unnecessary characters? For example, if I wanted 5 digits, I'd want the following: Round to 5 digits: 1.234567 - 1.2346 Drop unnecessary zeros: 1.23 - 1.23 Force inclusion of a decimal point: 1 - 1. Duncan, Maybe sprintf() will work for you. As it's a wrapper for C sprintf, it should have its functionality. Maybe, but with which format string? Duncan Murdoch I don't believe (though could be wrong), that you can do it all with one format string, but can do it conditionally based upon the input. According to the C printf documentation, the use of # forces a decimal point to be present, even if there are no trailing digits. Thus: sprintf(%#.f, 1) [1] 1. The other two values seem to be handled by signif() when applied to each value individually: signif(1.234567, 5) [1] 1.2346 signif(1.23, 5) [1] 1.23 But, not when a vector: signif(c(1.234567, 1.23), 5) [1] 1.2346 1.2300 So, wrapping that inside a function, using ifelse() to test for an integer value: signif.d - function(x, digits) { ifelse(x == round(x), sprintf(%.#f, x), signif(x, digits)) } x - c(1.234567, 1.23, 1) signif.d(x, 5) [1] 1.2346 1.23 1. signif.d(x, 6) [1] 1.23457 1.231. signif.d(x, 7) [1] 1.234567 1.23 1. Not extensively tested of course, but hopefully that might work for your needs Duncan. Regards, Marc Schwartz __ 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.
Re: [R] Format wanted...
On 12-03-25 10:45 AM, Marc Schwartz wrote: On Mar 25, 2012, at 7:14 AM, Duncan Murdoch wrote: On 12-03-24 10:47 PM, J Toll wrote: On Sat, Mar 24, 2012 at 7:30 PM, Duncan Murdoch murdoch.dun...@gmail.com wrote: Do we have a format that always includes a decimal point and a given number of significant digits, but otherwise drops unnecessary characters? For example, if I wanted 5 digits, I'd want the following: Round to 5 digits: 1.234567 - 1.2346 Drop unnecessary zeros: 1.23 - 1.23 Force inclusion of a decimal point: 1 - 1. Duncan, Maybe sprintf() will work for you. As it's a wrapper for C sprintf, it should have its functionality. Maybe, but with which format string? Duncan Murdoch I don't believe (though could be wrong), that you can do it all with one format string, but can do it conditionally based upon the input. According to the C printf documentation, the use of # forces a decimal point to be present, even if there are no trailing digits. Thus: sprintf(%#.f, 1) [1] 1. The other two values seem to be handled by signif() when applied to each value individually: signif(1.234567, 5) [1] 1.2346 signif(1.23, 5) [1] 1.23 But, not when a vector: signif(c(1.234567, 1.23), 5) [1] 1.2346 1.2300 So, wrapping that inside a function, using ifelse() to test for an integer value: signif.d- function(x, digits) { ifelse(x == round(x), sprintf(%.#f, x), signif(x, digits)) } x- c(1.234567, 1.23, 1) signif.d(x, 5) [1] 1.2346 1.23 1. signif.d(x, 6) [1] 1.23457 1.231. signif.d(x, 7) [1] 1.234567 1.23 1. Not extensively tested of course, but hopefully that might work for your needs Duncan. Thanks. I had put together a different conditional (just do the conversion, then add a decimal point at the end if none is seen), but I was surprised that there was no standard format for this. In case anyone is interested, I want to output code in a language (GLSL) that sees 1 and 1. as different types. I want a floating point value, so I need the decimal point. Duncan Murdoch __ 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.
Re: [R] Format wanted...
Duncan, On 25 March 2012 15:28, Duncan Murdoch murdoch.dun...@gmail.com wrote: In case anyone is interested, I want to output code in a language (GLSL) that sees 1 and 1. as different types. I want a floating point value, so I need the decimal point. GLSL, assuming it's the one that I'm looking at[1], supports implicit conversion from integer to float by appending .0 to the end. -- Sent from my mobile device Envoyait de mon portable 1. http://www.opengl.org/wiki/GLSL_Types#Implicit_conversion __ 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.
[R] Format wanted...
Do we have a format that always includes a decimal point and a given number of significant digits, but otherwise drops unnecessary characters? For example, if I wanted 5 digits, I'd want the following: Round to 5 digits: 1.234567 - 1.2346 Drop unnecessary zeros: 1.23 - 1.23 Force inclusion of a decimal point: 1 - 1. Duncan Murdoch __ 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.
Re: [R] Format wanted...
On Sat, Mar 24, 2012 at 7:30 PM, Duncan Murdoch murdoch.dun...@gmail.com wrote: Do we have a format that always includes a decimal point and a given number of significant digits, but otherwise drops unnecessary characters? For example, if I wanted 5 digits, I'd want the following: Round to 5 digits: 1.234567 - 1.2346 Drop unnecessary zeros: 1.23 - 1.23 Force inclusion of a decimal point: 1 - 1. Duncan, Maybe sprintf() will work for you. As it's a wrapper for C sprintf, it should have its functionality. James __ 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.