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

R. Michael Weylandt michael.weylandt at gmail.com
Thu Aug 16 06:00:35 CEST 2012


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.
>
>



More information about the R-help mailing list