dim.ff {ff}R Documentation

Getting and setting dim and dimorder

Description

Assigning dim to an ff_vector changes it to an ff_array. Beyond that dimorder can be assigned to change from column-major order to row-major order or generalizations for higher order ff_array.

Usage

  ## S3 method for class 'ff':
  dim(x)
  ## S3 method for class 'ff':
  dim(x) <- value
   dimorder(x, ...)
   dimorder(x, ...) <- value
  ## Default S3 method:
  dimorder(x, ...)
  ## S3 method for class 'ff_array':
  dimorder(x, ...)
  ## S3 method for class 'ff_array':
  dimorder(x, ...) <- value

Arguments

x a ff vector
value a character vector
... further arguments (not used)

Details

dim and dimorder are virtual attributes. Thus two copies of an R ff object can point to the same file but interpret it differently. dim has the usual meaning, dimorder defines the dimension order of storage, i.e. c(1,2) corresponds to R's standard column-major order, c(1,2) corresponds to row-major order, and for higher dimensional arrays dimorder can also be used. Standard dimorder is 1:length(dim(x)). An even higher level of virtualization is available using virtual windows, see vw.

Value

names returns a character vector (or NULL)

Note

x[] returns a matrix like x[,] and thus respects dimorder, while x[i:j] returns a vector and simply returns elements in the stored order. Check the corresponding example twice, in order to make sure you understand that for non-standard dimorder x[1:length(x)] is not the same as as.vector(x[]).

Author(s)

Jens Oehlschlägel

See Also

dim, dimnames.ff_array, vw, virtual

Examples

  x <- ff(1:12, dim=c(3,4), dimorder=c(2:1))
  y <- x
  dim(y) <- c(4,3)
  dimorder(y) <- c(1:2)
  x
  y
  x[]
  y[]
  x[,bydim=c(2,1)]
  y[,bydim=c(2,1)]

  cat("NOTE that x[] like x[,] returns a matrix (respects dimorder),\n")
  cat("while x[1:12] returns a vector IN STORAGE ORDER\n")
  cat("check the following examples twice to make sure you understand this\n")
  x[,]
  x[]
  as.vector(x[])
  x[1:12]
  delete(x)
  delete(y)
  rm(x,y)

  ## Not run: 
    cat("some performance comparison between different dimorders\n")
    n <- 100
    m <- 100000
    a <- ff(1L,dim=c(n,m))
    b <- ff(1L,dim=c(n,m), dimorder=2:1)
    system.time(lapply(1:n, function(i)sum(a[i,])))
    system.time(lapply(1:n, function(i)sum(b[i,])))
    system.time(lapply(1:n, function(i){i<-(i-1)*(m/n)+1; sum(a[,i:(i+m/n-1)])}))
    system.time(lapply(1:n, function(i){i<-(i-1)*(m/n)+1; sum(b[,i:(i+m/n-1)])}))
  
## End(Not run)

[Package ff version 2.0.0 Index]