Re: [R] String manipulation and formatting

From: Hans-Joerg Bibiko <bibiko_at_eva.mpg.de>
Date: Tue 18 Jul 2006 - 19:47:28 EST

Hi,

only if you allow to input x as a string then you can use, maybe, simply the following one-line-command:

xify <- function(x)
{

	gsub(
		"[0-9]",
		"X",
		sprintf(
			paste("%",ifelse(regexpr("\\.",x) > 0, x, x<-paste(x,". 
0",sep="")), "f",sep=""),
			10^(trunc(as.numeric(x))-as.integer(gsub("(.*?)\\.(.*?)","\\2",x))-1)
		)
	)

}

> xify("30.10")

  [1] "XXXXXXXXXXXXXXXXXXXX.XXXXXXXXXX"

Hans-Joerg

>>> Thanks to Richard, Gabor and Marc for some nice solutions to my  
>>> request.
>>>
>>> I have a new problem:
>>>
>>>> xify(30.10)
>>>   [1] "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X"
>>>> xify(30.11)
>>>   [1] "XXXXXXXXXXXXXXXXXXX.XXXXXXXXXXX"
>>>
>>> The problem originates from:
>>>
>>>> as.numeric(unlist(strsplit(as.character(15.10), "\\.")))
>>>   [1] 15  1
>>>> as.numeric(unlist(strsplit(as.character(15.11), "\\.")))
>>>   [1] 15 11
>>>
>>> It seems to boils down to:
>>>
>>>> as.character(15.10)
>>>   [1] "15.1"
>>>
>>> A simple solution is:
>>>
>>>> xify("15.10")
>>>   [1] "XXXXX.XXXXXXXXXX"
>>>
>>> I was wondering if there is a simple way for xify to see the zero  
>>> of the
> 10
>>> without having to force the user to add quotes around the format?
>>
>> No, as the parser has converted '15.10' to a numeric constant.
>>
>> What is the problem with asking users to enter strings as strings?
>>

______________________________________________
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 and provide commented, minimal, self-contained, reproducible code. Received on Tue Jul 18 19:52:24 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Tue 18 Jul 2006 - 20:17:26 EST.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.