[R] creating series of vectors

Petr Savicky savicky at cs.cas.cz
Thu Feb 16 21:41:36 CET 2012


On Thu, Feb 16, 2012 at 05:32:15PM +0100, Nino Pierantonio wrote:
> Dear All,
> 
> I am pretty new to R and thus my question may sound silly.
> 
> Is there a way to automatically generate a series of separate vectors 
> (so not arranged in a matrix), without typing and changing every time 
> the values, and store them as separate *xlsx file, where the "*" is 
> replaced by the name of the vector itself?
> 
> What i would like to create is a total of 12 vectors, corresponding to 
> the 12 months (January to December), say for the year 2006; thus the 
> name of a resulting single vector should be something like 
> "January2006", and the final file that will be stored in my WD should 
> have the same name ("January2009.xlsx").
> 
> The number of the elements of each vector must correspond to the length 
> in days of the single months (considering a non-leap-year, 356 days) 
> multiplied by 2 (e.g. "January2006" will have 31*2=62 elements, 
> "February2006" will have 28*2=56 elements, and so on).
> 
> Finally, the elements of the vectors should be named as: 
> "010106_aaa","010106_bbb","020106_aaa","020106_bbb", ... , 
> "310106_aaa","310106_bbb".
> 
> To sum up, at the end of the process i would like to obtain 12 vectors 
> as it follows:
> 
> Jauary2006("010106_aaa","010106_bbb","020106_aaa","020106_bbb", ... , 
> "310106_aaa","310106_bbb")
> .
> .
> .
> .
> .
> December2006("010106_aaa","010106_bbb","020106_aaa","020106_bbb", ... , 
> "310106_aaa","310106_bbb")

Hi.

Try the following function, which creates a list of vectors.

  seqDays <- function(year)
  {
      n <- 365 + (year %% 4 == 0)
      x <- as.Date(paste(year, "-01-01", sep="")) + 0:(n-1)
      months <- unique(months(x))
      x <- do.call(rbind, strsplit(as.character(x), "-"))
      x1 <- sprintf("%02d", year %% 100)
      y <- paste(x[, 3], x[, 2], x1, sep="")
      y <- c(rbind(paste(y, "_aaa", sep=""), paste(y, "_bbb", sep="")))
      x2 <- rep(x[, 2], each=2)
      out <- split(y, x2)
      names(out) <- paste(months, year, sep="")
      out
  }
 
  out <- seqDays(2006)
  out

  $January2006
   [1] "010106_aaa" "010106_bbb" "020106_aaa" "020106_bbb" "030106_aaa"
   [6] "030106_bbb" "040106_aaa" "040106_bbb" "050106_aaa" "050106_bbb"
  [11] "060106_aaa" "060106_bbb" "070106_aaa" "070106_bbb" "080106_aaa"
  [16] "080106_bbb" "090106_aaa" "090106_bbb" "100106_aaa" "100106_bbb"
  [21] "110106_aaa" "110106_bbb" "120106_aaa" "120106_bbb" "130106_aaa"
  [26] "130106_bbb" "140106_aaa" "140106_bbb" "150106_aaa" "150106_bbb"
  [31] "160106_aaa" "160106_bbb" "170106_aaa" "170106_bbb" "180106_aaa"
  [36] "180106_bbb" "190106_aaa" "190106_bbb" "200106_aaa" "200106_bbb"
  [41] "210106_aaa" "210106_bbb" "220106_aaa" "220106_bbb" "230106_aaa"
  [46] "230106_bbb" "240106_aaa" "240106_bbb" "250106_aaa" "250106_bbb"
  [51] "260106_aaa" "260106_bbb" "270106_aaa" "270106_bbb" "280106_aaa"
  [56] "280106_bbb" "290106_aaa" "290106_bbb" "300106_aaa" "300106_bbb"
  [61] "310106_aaa" "310106_bbb"
  
  $February2006
   [1] "010206_aaa" "010206_bbb" "020206_aaa" "020206_bbb" "030206_aaa"
   [6] "030206_bbb" "040206_aaa" "040206_bbb" "050206_aaa" "050206_bbb"
  [11] "060206_aaa" "060206_bbb" "070206_aaa" "070206_bbb" "080206_aaa"
  [16] "080206_bbb" "090206_aaa" "090206_bbb" "100206_aaa" "100206_bbb"
  [21] "110206_aaa" "110206_bbb" "120206_aaa" "120206_bbb" "130206_aaa"
  [26] "130206_bbb" "140206_aaa" "140206_bbb" "150206_aaa" "150206_bbb"
  [31] "160206_aaa" "160206_bbb" "170206_aaa" "170206_bbb" "180206_aaa"
  [36] "180206_bbb" "190206_aaa" "190206_bbb" "200206_aaa" "200206_bbb"
  [41] "210206_aaa" "210206_bbb" "220206_aaa" "220206_bbb" "230206_aaa"
  [46] "230206_bbb" "240206_aaa" "240206_bbb" "250206_aaa" "250206_bbb"
  [51] "260206_aaa" "260206_bbb" "270206_aaa" "270206_bbb" "280206_aaa"
  [56] "280206_bbb"
  
  $March2006
   [1] "010306_aaa" "010306_bbb" "020306_aaa" "020306_bbb" "030306_aaa"
  ...

Individual vectors may be accessed as out[[i]], their names
as names(out).

Storing to text files may be done as follows.

  for (i in 1:12) {
      writeLines(out[[i]], con=paste(names(out)[i], ".txt", sep=""))
  }

Hope this helps.

Petr Savicky.



More information about the R-help mailing list