[R] jagged array (matrices of different dimensions)
Joshua Wiley
jwiley.psych at gmail.com
Sat Aug 6 04:13:14 CEST 2011
Dear Stephanie,
At first I just tried typing and ended up with a butcchered
frankenstein of a solution. Then I thought about (novel, right? ;)
and realized several of the steps in your for loop could be simplified
substantially, namely, the last step is just: exp(- (0:(i - k)))
Then I just pad the start of each vector with NAs, use sapply() which
will automatically simplify to a matrix, rather than using an array,
use a list to store the different sized matrices. The result is:
tim <- c(10,12,5) #number of observations per individual
struc <- lapply(tim, function(i) {
sapply(1:i, function(k) {
c(rep(NA, k - 1), exp(- (0:(i - k))))
})
})
three different sized matrices in a list. If you need the full
correlation matrix, not just the lower triangle, you can look at ?t
and ?lower.tri
Hope this helps,
Josh
On Fri, Aug 5, 2011 at 2:42 PM, Kliethermes, Stephanie A
<stephanie-kliethermes at uiowa.edu> wrote:
> Dear all,
>
>
>
> I am having trouble creating a "jagged array" in R. I have found no commentary on how to do it in the help files, but maybe I am misunderstanding the purpose of some of the array functions (e.g. tapply).
>
>
>
> I am using a longitudinal dataset where each individual has a different number of time points (observations). I need to create correlation structures for each individual which are necessarily different lengths. Currently I am using for loops in an attempt to do so. The closest I can get is with the following code (n=3) where I create matrices of the same dimensions with NA's for timepoints not used. Perhaps there is simply a way to drop these NA's?
>
>
>
> I would appreciate any thoughts on how to create a jagged array to store matrices of different dimensions or direction towards a help-file or package that will help me out.
>
>
>
> Thanks in advance!
>
>
>
>
>
> n<-3 #sample size
> tim<-c(10,12,5) #number of observations per individual
> tim.pts<-12 #number of possible observations
> struc<-array(NA,dim=c(tim.pts,tim.pts,n))
>
>
> for(i in 1:n){
>
> for(k in 1:tim[i]){
> for(j in k:tim[i]){
> struc[k,j,i]<- (exp(-(j-k)))
> struc[j,k,i]=struc[k,j,i]
> }
> }
>
>
> }
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
Joshua Wiley
Ph.D. Student, Health Psychology
Programmer Analyst II, ATS Statistical Consulting Group
University of California, Los Angeles
https://joshuawiley.com/
More information about the R-help
mailing list