[R] dimnames in an array(I'll be grateful if this message will be passed to all list users)

aleksandr shfets a_shfets at mail.ru
Wed Aug 22 10:51:40 CEST 2012


Hi,
Thank you for the suggestions.
I've attached the code in the text file "test"; to run this one needs the CollocInfer package(available under R 2.14, now I think if you have 2.14 on your system you can download CollocInfer from CRAN).

I've tried the 'error' options you suggest; using the syntax  "dimnames(data2)[1:2]" does seem to give an improvement of the attributes of the array,

But even with the attributes seeming to be in as good order as they might be(i.e., each boxcar, [[1]],[[2]],[[3]] contains the correct number of names), rerunning the analysis with the revised array returns the same error.


traceback() gives
4: `colnames<-`(`*tmp*`, value = c("V", "R"))
3: objective(.par, ...)
2: nlminb(coefs, SplineCoefsErr, gradient = SplineCoefsDC, hessian = Hessian, 
       control = control.in, times = times, data = data, lik = lik, 
       proc = proc, pars = pars)
1: inneropt(coefs = DEfd2$coefs, times = times, data = data2, lik = lik, 
       proc = proc, pars = spars, in.meth = "nlminb", control.in = control.out)

To my (untrained) eye, this points again to some kind of mismatch between the array 'data2' and its dimnames.

Again I'll be grateful if anyone can see what the problem is.

regards,

A
(recover() also is unfruitful)



Fri, 17 Aug 2012 15:28:19 +0000 от William Dunlap <wdunlap at tibco.com>:
>	
>
>
	
	
>
		
		
			
>Have you showed us how to reproduce your original problem?
>
Have you showed us the output of traceback() after encountering
>
the error?  Have you tried setting options(error=recover) before
>
encountering the error and then using recover() to look at the dimensions
>
and dimnames of the array that caused the problem?
>
>
This error message
>
> >                   Error in `colnames<-`(`*tmp*`, value = c("V", "R")) :
>
> >                   length of 'dimnames' [2] not equal to array extent
>
comes from a nested replacement operation.  One such such case is
>
     mat <- matrix(1:6,nrow=2,ncol=3)
>
     colnames(mat)[1:2] <- c("V", "R")
>
where the nested replacement gets expanded into
>
     tmp <- colnames(mat) # tmp becomes NULL
>
     tmp[1:2] <- c("V", "R") # tmp becomes c("V","R"), length is 2
>
     colnames(tmp) <- tmp # error: 2 colnames for 3 columns
>
(R uses `*tmp*` where I used tmp - the former is for internal use only.)
>
>
There are lots of other possibilities, but you need to at least show the
>
output of traceback() to pin it down.
>
>
Bill Dunlap
>
Spotfire, TIBCO Software
>
wdunlap tibco.com
>
>
>
> -----Original Message-----
>
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
>
> Of aleksandr shfets
>
> Sent: Friday, August 17, 2012 6:25 AM
>
> To: R. Michael Weylandt
>
> Cc: r-help at r-project.org
>
> Subject: Re: [R] dimnames in an array(I'll be grateful if this message will be passed to all
>
> list users)
>
> 
>
> 
>
> Michael,
>
> Thank you for suggestions;
>
> it seems to me that there's a fundamental lacuna with respect to names of a three
>
> dimensional array:
>
> that is, rownames fits dimension 1, colnames fits another dimension(that is, 3, if I read it
>
> correctly),
>
> but there is no specific name for the third dimension. I've tried "setnames" thinking that
>
> this would be appropriate
>
> for naming the sets, but there is no such R function.
>
> 
>
> On the other hand you're right, the suggestion
>
>              dimnames(data11a)[[2]]=c("V","R")
>
> 
>
> doesn't ameliorate the analysis: while now dimnames(data11a)[[2]]
>
> 
>
> comes out as
>
> [2]
>
> 
>
> returning to the original analysis the same error comes up, that is, that the length of
>
> dimnames[2] doesn't agree with thee.
>
> 'array extent' -- that is, even though the boxcar contents are two in number, it evaluates
>
> the analysis on the basis of the
>
> dimnames(data11a)[2] value.
>
> 
>
> I'm using colloc infer (available under R 2.14) and trying to do the FHN(FitzHugh Nagumo)
>
> analysis in section 9.1 of the manual; it's very complex work, but I doubt the program is
>
> in error.
>
> 
>
> It seems to me in any case that, if R demands that the length of 'dimnames[2] must be
>
> equal to the array extent, then there must be a way to make the length of the names
>
> equal to the extent of the array, am I right?
>
> Otherwise R would be inconsistent with itself, like Nomad on Startrek, and I've never
>
> seen a case where it was thus.
>
> 
>
> This is again why I ask if others with extensive experience with dimnames of an array
>
> have seen anything similar.
>
> Certainly someone might know what is the significance of the dimnames of the array,
>
> how much can the length of them be altered for use generally?
>
> 
>
> regards,
>
> A
>
> Thu, 16 Aug 2012 00:00:35 -0400 от "R. Michael Weylandt"
>
> <michael.weylandt at gmail.com>:
>
> >
>
> >
>
> >
>
> 
>
> 
>
> >
>
> 
>
> 
>
> 
>
> >On Wed, Aug 15, 2012 at 3:57 AM, aleksandr shfets <a_shfets at mail.ru> wrote:
>
> >
>
> > Hi Michael,
>
> >
>
> > Thanks for help on double brackets: I wasn't aware of this use of them.
>
> >
>
> >
>
> >
>
> > I went back to readjust my array so the dimnames(data11a)[[2]] would have
>
> >
>
> > two elements, and remade the array to include the new dimnames:
>
> >
>
> >
>
> >
>
> > dimnames(data11a)[[2]]=c("V","R")
>
> >
>
> >
>
> >
>
> > so that inside the second car of the train would
>
> >
>
> > be two items?
>
> >
>
> >
>
> Yes.
>
> >
>
> >
>
> >
>
> >
>
> > There seems to be no way to define dimnames(data11a)[2] to be two elements
>
> >
>
> > rather than one[as you say we have no way to combine the elements of the
>
> >
>
> > train except using the train].
>
> >
>
> >
>
> You could do this:
>
> >
>
> >
>
> dimnames(data11a)[2] <- list(c("V","R"))
>
> >
>
> >
>
> but I'm not sure that's any clearer. To keep the metaphor rolling (get
>
> >
>
> it!), list() puts your stuff in a boxcar so now you can put it
>
> >
>
> directly on the train.
>
> >
>
> >
>
> > So having tried to do what I can to make the
>
> >
>
> > middle element of the list to two rather than one, I rerun the analysis with
>
> >
>
> > the same result.
>
> >
>
> >
>
> >
>
> > if I read the thing right, regardless of how I define the "inside" of the
>
> >
>
> > boxcar, the analysis that I referred to
>
> >
>
> >
>
> >
>
> >                  res11a = inneropt(coefs, times=times, data=data11a,
>
> >
>
> > lik=lik,
>
> >
>
> >                  proc=proc, pars=spars, in.meth='nlminb',
>
> >
>
> > control.in=control.out)
>
> >
>
> >
>
> >
>
> >
>
> Where is this inneropt function from? It could be an error in that. If
>
> >
>
> it's from a package, give me the name and I'll take a look at it and
>
> >
>
> you can also contact the maintainer: get contact info using the
>
> >
>
> maintainer() function.
>
> >
>
> >
>
> Also, some of the advice here will probably be helpful  in seeking follow-up:
>
> >
>
> >http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-
>
> example
>
> >
>
> >
>
> Cheers,
>
> >
>
> Michael
>
> >
>
> >
>
> > still won't look at the 'contents' of the car, but gives the same message:
>
> >
>
> >
>
> >
>
> >                   Error in `colnames<-`(`*tmp*`, value = c("V", "R")) :
>
> >
>
> >                   length of 'dimnames' [2] not equal to array extent
>
> >
>
> >
>
> >
>
> >
>
> >
>
> > I've tried a couple of other things like, after defining the second boxcar
>
> >
>
> > as:
>
> >
>
> >
>
> >
>
> >                   dimnames(data11a)[[2]]=c("V","R")
>
> >
>
> >
>
> >
>
> >
>
> >
>
> > then
>
> >
>
> >
>
> >
>
> >
>
> >
>
> >                    dimnames(data11a)[2]=list(dimnames(data11a)[[2]])
>
> >
>
> >
>
> >
>
> >
>
> >
>
> > but this last generates an error.
>
> >
>
> >
>
> >
>
> > Somehow I think that that the clue to the thing is in the error message:
>
> >
>
> > what I see[ with my untrained eye] is that there should be some way to
>
> >
>
> > reconcile the three-- colnames, dimnames and the array- to a greater degree
>
> >
>
> > than their present agreement.
>
> >
>
> > Am I right?
>
> >
>
> > regards,
>
> >
>
> > Russell
>
> >
>
> >
>
> >
>
> > Tue, 14 Aug 2012 01:27:50 -0400 от "R. Michael Weylandt"
>
> >
>
> > <michael.weylandt at gmail.com>:
>
> >
>
> >
>
> >
>
> > On Mon, Aug 13, 2012 at 5:10 AM, aleksandr russell <sss736 at gmail.com> wrote:
>
> >
>
> >> Hello,
>
> >
>
> >>
>
> >
>
> >> I'm hoping someone with a wide experience with R may be able to see
>
> >
>
> >> what the program is trying to tell me.
>
> >
>
> >>
>
> >
>
> >> I've got an array:
>
> >
>
> >>
>
> >
>
> >> y1=rnorm(41,0.2)
>
> >
>
> >> y2=rnorm(41,0.2)
>
> >
>
> >> y3=rbind(y1,y2)
>
> >
>
> >>
>
> >
>
> >>
>
> >
>
> >>
>
> >
>
> >> data11<-array(0,c(41,2,2))
>
> >
>
> >> data11[,1,]=y3
>
> >
>
> >> data11[,2,]=y3
>
> >
>
> >> rownames(data11)<-rownames(data11, do.NULL = FALSE, prefix = "Obs.")
>
> >
>
> >> colnames=c("V","R")
>
> >
>
> >> varnames=c("one","two")
>
> >
>
> >> dimnames(data11)<-list(rownames(data11), varnames, colnames)
>
> >
>
> >>
>
> >
>
> >>
>
> >
>
> >>
>
> >
>
> >> data11a<-as.array(data11, dimnames=dimnames(data11))
>
> >
>
> >
>
> >
>
> > # No effect here
>
> >
>
> >  identical(data11, data11a) # TRUE
>
> >
>
> >
>
> >
>
> >>
>
> >
>
> >> The analysis that I would like to do with R(CollocInfer) runs as
>
> >
>
> >> follows(I print for the sake of introduction here though to run this
>
> >
>
> >> line of code requires extensive setup)
>
> >
>
> >>
>
> >
>
> >> res11a = inneropt(coefs, times=times, data=data11a, lik=lik,
>
> >
>
> >> proc=proc, pars=spars, in.meth='nlminb', control.in=control.out)
>
> >
>
> >>
>
> >
>
> >>
>
> >
>
> >>
>
> >
>
> >> The response I get is
>
> >
>
> >>
>
> >
>
> >> Error in 'colnames<-'('*tmp*', value = c("V","R")) :
>
> >
>
> >> length of 'dimnames' [2] not equal to array extent
>
> >
>
> >>
>
> >
>
> >>
>
> >
>
> >>
>
> >
>
> >> It seems to me that there is a fundamental match of 'dimnames' with
>
> >
>
> >> the array that is being referred to.
>
> >
>
> >>
>
> >
>
> >> I have learned that the normal length of dimnames for an array is one
>
> >
>
> >> for each element in the list: thus as I've set up the array, the
>
> >
>
> >> length(dimnames(data11a)[2]) gives me
>
> >
>
> >>
>
> >
>
> >> [1]
>
> >
>
> >
>
> >
>
> > I believe you are looking for
>
> >
>
> >
>
> >
>
> > length(dimnames(data11a)[[2]]) # 2
>
> >
>
> >
>
> >
>
> > Look into the difference between `[` and `[[` for subsetting a list.
>
> >
>
> > See ?Extract for the gorey details, but I like my little train
>
> >
>
> > metaphor:
>
> >
>
> >
>
> >
>
> > If the list "x", is a train: x[2] is the "sub-train" consisting only
>
> >
>
> > of the second car, while x[[2]] is the contents of that second car.
>
> >
>
> > Hence we can do x[1:3] to give a well defined train, but not x[[1:3]]
>
> >
>
> > because we have no way to combine the elements of the first three cars
>
> >
>
> > other than using a train.
>
> >
>
> >
>
> >
>
> > Cheers,
>
> >
>
> > Michael
>
> >
>
> >
>
> >
>
> >>
>
> >
>
> >> I would like to ask :Is it not evident from R's response that there is
>
> >
>
> >> some other possibility for the dimnames[2] of the array?
>
> >
>
> >>
>
> >
>
> >> If so, what is it?
>
> >
>
> >>
>
> >
>
> >> regards,
>
> >
>
> >> A
>
> >
>
> >>
>
> >
>
> >> ______________________________________________
>
> >
>
> >> 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.
>
> >
>
> >
>
> >
>
> >
>
> >
>
> 
>
> 
>
> 
>
> 
>
> 
>
> 
>
> 
>
> 	[[alternative HTML version deleted]]
>
>
			
		
		
	

	
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: not available
URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20120822/322d0ffb/attachment-0001.pl>


More information about the R-help mailing list