Nothing
# CHNOSZ/util.array.R
# Functions to work on multidimensional arrays
# 20100314 jmd
list2array <- function(l) {
# Turn a list of arrays (each with the same dimension) into an array,
# which has an additional dimension with size equal to the number of initial arrays
d <- dim(l[[1]])
if(is.null(d)) d <- length(l[[1]])
n <- length(l)
# The size of each of the input arrays
ni <- prod(d)
# The total size of the output array
nt <- prod(c(ni,n))
# lapply is fast, but it just returns another list
# and sapply (and unlist) is slow
#arr <- sapply(l,as.numeric)
arr <- numeric(nt)
# Enter values into the vector
for(i in 1:n) arr[(1:ni)+(i-1)*ni] <- l[[i]]
# Turn the vector into an array with the required dimensions
dim(arr) <- c(d,n)
return(arr)
}
slice <- function(arr,d=NULL,i=1,value=NULL) {
# Extract/assign values from/to the ith slice(s)
# in the dth dimension of an array
mydim <- dim(arr)
nd <- length(mydim)
# Build an expression used to index the array 20101031
prefix <- paste(rep(",",d-1),collapse="")
suffix <- paste(rep(",",nd-d),collapse="")
# The ith slices of the dth dimension
expr <- paste(prefix,deparse(i),suffix,sep="")
# The old (maybe slower) way
#expr <- rep("",nd)
#expr[d] <- "i"
#expr <- c2s(expr,sep=",")
if(is.null(value)) {
expr <- paste("arr[",expr,"]",sep="")
return(eval(parse(text=expr)))
} else {
expr <- paste("arr[",expr,"] <- value",sep="")
# The following performs the given operation on arr
eval(parse(text=expr))
return(arr)
}
}
dimSums <- function(arr,d=1,i=NULL) {
# Sum an n-dimensional array along the dth dimension
# using only the ith slices in that dimension
# Merged from mj/plot.R 20100314 jmd
# e.g., if 'arr' is a matrix, the following are TRUE:
# identical(dimSums(arr,1),colSums(arr))
# identical(dimSums(arr,2),rowSums(arr))
# If i is NULL we use all slices in the dth dimension
if(is.null(i)) i <- 1:dim(arr)[d]
# Now take the sum
for(j in 1:length(i)) {
s <- slice(arr,d=d,i=i[j])
if(j==1) out <- s else out <- out + s
}
return(out)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.