R: Getting and setting dim and dimorder

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 'ffdf'
    dim(x)
      ## S3 replacement method for class 'ff'
    dim(x) <- value
      ## S3 replacement method for class 'ffdf'
    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 'ffdf'
    dimorder(x, ...)
      ## S3 replacement method for class 'ff_array'
    dimorder(x, ...) <- value
      ## S3 replacement method for class 'ffdf'
    dimorder(x, ...) <- value  # just here to catch forbidden assignments

### Arguments

`x` | a ff object
`value` | an appropriate integer 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))`.
For `ffdf` `dim` returns the number of rows and virtual columns. With `dim<-.ffdf` only the number of rows can be changed. For convenience you can assign `NA` to the number of columns.
For `ffdf` the dimorder returns non-standard dimorder if any of its columns contains a ff object with non-standard dimorder (see `dimorderStandard`) 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`, `dimorderStandard`, `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)]

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

      ## Not run:
        message("some performance comparison between different dimorders")
        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)])}))
        rm(a,b); gc()

    ## End(Not run)

[Package ff version 2.2-13 Index]