[R] dimnames in array

aleksandr russell sss736 at gmail.com
Wed Aug 8 17:43:41 CEST 2012


Hi again,

Thanks for your suggestion.
I think I can clarify the thing by looking at the bare bones:

	data11 = array(0,c(41,2,2))

	m8<-cbind(.29,1:41)
	m9<-as.array(m8,dim=c(41,2))
	data11[,1,]=m9
	data11[,2,]=m9

	varnames=c("V","R")
 	colnames(data11)=c("one","two")
 	dimnames(data11)=list(rownames(data11),varnames,colnames(data11))
 	data11a<-as.array(data11,dimnames=dimnames(data11))


Just running the above, some artificial data, I come out with
an array that seems to be have the right attributes: typing
"attributes(data11a)" I get dimnames for each dimension.

The problem  is that [package 'colloc infer' says]
(and I quote):
Error in `colnames<-`(`*tmp*`, value = c("V", "R")) :
  length of 'dimnames' [2] not equal to array extent

It seems that the names for the second dimension of the array must
have length of 2 -- rather than the present "1" for the analysis to
work.

Again, typing

	length(dimnames(data11a)[2])
I get

	[1] 1

I've tried your suggestion for the dimnames but I'm getting an  error
"could not find function paste0"
Maybe you're using R later than 2.41?

thanks,
Alexander

On Wed, Aug 8, 2012 at 10:52 AM, David Winsemius <dwinsemius at comcast.net> wrote:
>
> On Aug 8, 2012, at 3:19 AM, aleksandr russell wrote:
>
>> Hello,
>>
>> I'm working with an array; I'm trying to make it so that an array of
>> dim(42,2,2) has names whose length corresponds to that of the array,
>> and am hoping someone with experience with this can see what I'm not
>> doing correctly:
>>
>>
>>
>>
>> data11 = array(0,c(41,2,2))
>>
>> y = lsoda(x0,times,fhn$fn.ode,pars)#This is make.fhn() from colloc
>> infer package#
>
>
>>  y = y[,2:3]
>>
>> data11<-array(0,c(41,2,2))
>>
>>
>> m8<-cbind(.29,1:41)
>>    m9<-as.array(m8,dim=c(41,2))
>>
>>  data11[,1,] = y+m9
>>   data11[,2,] = y+m9
>
>
> I didn't run that code since your difficulties did not seem to have anything
> to do with the values inside the array but only with the dimension labeling.
>
>>
>> rownames(data2, do.NULL = FALSE, prefix="row")
>
>
> What is 'data2'?
>
>
>> varnames=c("V","R")
>> colnames(data6)=c("one","two")
>
>
> Ditto... what is 'data6'?
>
>
>> colnames(data10)=colnames(data6)
>> dimnames(data11)=list(rownames(data2),varnames,colnames(data10))
>> data11a<-as.array(data11,dimnames=dimnames(data11))
>> attributes(data11a)
>>
>> #so this seems to print out the array attributes as they
>> should be:
>
>
> For which object?
>
>
>> two sets of two columns each, and the first column of
>> each set is called 'v' and the second 'r'- no problem#
>
>
> The data11 object had three dimenstions.
>
>
>>
>> now the analysis from colloc infer(I've put it in below*)
>> takes this array but will not complete the analysis, saying
>>
>>         "Error in `colnames<-`(`*tmp*`, value = c("V", "R")) :
>>  length of 'dimnames' [2] not equal to array extent"
>
>
> Here's one way to label a 41 x 2 x 2 array:
>
>> dimnames(data11)<- c(list(X=paste0("X",1:41)), list(Y=paste0("Y",1:2)),
>> list(Z=paste0("Z",1:2)) )
>> attributes(data11)
> $dim
> [1] 41  2  2
>
> $dimnames
> $dimnames$X
>  [1] "X1"  "X2"  "X3"  "X4"  "X5"  "X6"  "X7"  "X8"  "X9"  "X10" "X11" "X12"
> "X13" "X14" "X15" "X16" "X17" "X18" "X19"
> [20] "X20" "X21" "X22" "X23" "X24" "X25" "X26" "X27" "X28" "X29" "X30" "X31"
> "X32" "X33" "X34" "X35" "X36" "X37" "X38"
> [39] "X39" "X40" "X41"
>
> $dimnames$Y
> [1] "Y1" "Y2"
>
> $dimnames$Z
> [1] "Z1" "Z2"
>
>>
>> When I type in
>>
>>         length(dimnames(data11a)[2])
>>
>> I get the answer:
>>
>>         [1] 1
>>
>> which seems odd when
>>
>>         dimnames(data11a)[2]
>>
>> gives
>>
>>         [[1]]
>>         [1] "V" "R"
>
>
> It is a one element list whose single element is a 2 element vector.
>
>
>>
>> I would like to ask "How can I get the names of the second dimension
>> of the array(data11a) to have length "2" ?
>>
>> It seems to me that the analysis will run if I can make this array
>> have the correct length dimnames
>>
>> I thank you for your help.
>>
>> ____________
>>
>>
>> *
>>  fd.data11a = data11a
>>  DEfd11a = Data2fd(fd.data11a, times, bbasis,
>>  fdnames=list(NULL,NULL,varnames))
>>
>>
>>
>> profile11a.obj=LS.setup(pars,DEfd11a$coefs,fhn,basisvals=bbasis,lambda,fd.obj=NULL,
>>  more=NULL,data=data11a,weights=NULL,times=times,quadrature=NULL,eps=1e-6,
>>  posproc=FALSE,poslik=FALSE,discrete=FALSE,names=NULL,sparse=FALSE)
>> lik = profile11a.obj$lik
>> proc = profile11a.obj$proc
>> qwts = rep(1/length(knots),length(knots))
>>  qwts = qwts %*% t(lambda)
>>  weights = array(1,dim(data11a))
>>  likmore = make.id()
>>  likmore$weights = weights
>>  lik = make.SSElik()
>>  lik$more = likmore
>>  lik$bvals = eval.basis(times,bbasis)
>>  procmore = make.fhn()
>>  procmore$weights = qwts
>>  procmore$qpts = qpts
>>  procmore$names = varnames
>>  procmore$parnames = parnames
>>  proc = make.SSEproc()
>>  proc$more = procmore
>>  proc$bvals = list(bvals = eval.basis(procmore$qpts,bbasis,0),
>>  dbvals = eval.basis(procmore$qpts,bbasis,1))
>> res11a = inneropt(coefs, times=times, data=data11a, lik=lik, proc=proc,
>>  pars=spars, in.meth='nlminb', control.in=control.out)
>
>
>
> --
> David Winsemius, MD
> Alameda, CA, USA
>



More information about the R-help mailing list