Getting and setting dim and dimorder
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
.
## 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
x |
a ff object |
value |
an appropriate integer vector |
... |
further arguments (not used) |
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 seq_along(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
.
names
returns a character vector (or NULL)
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[seq_along(x)]
is not the same as as.vector(x[])
.
Jens Oehlschlägel
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)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.