[R] Assigning a function to the 'times' argument of rep()

Petr Savicky savicky at cs.cas.cz
Mon Feb 13 09:24:56 CET 2012


On Sun, Feb 12, 2012 at 07:56:48PM -0800, z2.0 wrote:
> Question: 
> 
> I'm trying to use paste() with rep() to reformat a series of values as zip
> codes. e.g., if column 1 looks like:
> 
> 52775
> 83111
> 99240
> 4289
> 112
> 57701
> 20001
> 
> I want rows 4 and 5 to read,
> 
> "04289"
> "00112"
> 
> My thought was this:
> 
> > perry_frame$zip <- ifelse(nchar(as.character(perry_frame$zip))<5,
>  
> paste(rep("0",times=(5-nchar(as.character(perry_frame$zip)))),perry_frame$zip,sep=''),
>   as.character(perry_frame$zip))
> 
> But R throws the following:
> 
> Error in rep("0", times = (5 - nchar(as.character(perry_frame$zip)))) : 
>   invalid 'times' argument
> 
> Is there a reason this doesn't work?

Hi.

Working solutions were suggested by others. The answer
to your question is that "times" argument should either
be a single number or a vector of the same length as the
first argument. However,

  "0" has length 1

  5 - nchar(as.character(perry_frame$zip))
  [1] 0 0 0 1 2 0 0

Hope this helps.

Petr Savicky.



More information about the R-help mailing list