Thankyou Micheal!!! That was so nice of you. It cleared everything. Elisa > From: michael.weyla...@gmail.com > Date: Thu, 7 Mar 2013 11:31:59 +0000 > Subject: Re: [R] Error: no 'dimnames' attribute for array > To: eliza_bo...@hotmail.com > CC: r-help@r-project.org > > On Thu, Mar 7, 2013 at 11:19 AM, eliza botto <eliza_bo...@hotmail.com> wrote: > > Thankyou very much M. Weylandt. i was actually more interested in knowing > > about the error. > > Let's talk you through it then: > > As you said before you have > > b1 <- c(1L, 2L, 6L, 7L, 12L, 16L, 17L, 20L, 21L, 23L, 25L, 34L, 46L, > 48L, 58L, 64L, 65L, 68L, 82L, 97L, 98L, 101L, 113L, 115L) > > in your session. And from there you create: > > s<-noquote(paste (b1, collapse=",")) > > So let's take that apart: you take a set of integers (and integer > vector) and collapse it using the paste() function. This returns a > character string. You pass the resulting character string to noquote() > which is a relatively obscure function. However, it's not a hard one: > it basically attaches the "noquote" class to the object which allows > it to act in almost entirely the same way, but to be printed without > quotes. Note the difference in > > print(paste(b1, collapse = ", ")) > > and > > print(noquote(paste(b1, collapse = ", "))) > > So anyways, now you've got s and you use it to subscript a matrix. > Here R makes a decision that surprises you: it tries to interpret s as > a character vector! (because it is one) So what does it mean when you > subset by a character vector instead of a numeric index: well, to pull > out the apropriate row or column by _name_ instead of by position. To > do this requires knowing the names: so R looks for the relevant names, > which are normally stored in a property called "dimnames" (dimension > names). > > Your matrix, however, doesn't seem to have any dimnames, so R throws > an error saying (in effect) "you want me to get the rows by this name > and I am totally willing to do so, but there's this tiny little issue: > there aren't any names..." > > Now this could have turned out differently: your matrix could have had > some names, but none which matched s. Then you'd simply have > successful subsetting with no result, not unlike computing b1[0]. A > much more subtle error. So you should actually consider yourself lucky > you got the error at this stage instead of having to hunt it down in a > much more subtle form later. > > So how did I know all of this? Aside from some general familiarity > with R, I used the str() function which lets me take a look at what > "sort" of thing things in R are. (Say that three times fast!) When I > applied it to str(s) I found that s was a character vector of class > noquote -- and that's what made it all clear that your numbers weren't > really being interpreted as "numbers" because, well, they really > weren't numbers from R's point of view. > > Again, and just to make that last point clear: they weren't numbers > because there's a fundamental difference between "3" and 3 in > computers. One is the integral successor of 2, the other is a way that > humans happen to denote it at certain points in history in certain > computational contexts. Some languages like Perl let you play a bit > fast and loose with this distinction, but I don't think anyone would > argue that R needs to be more forgiving in its type system. > > Cheers, > MW [[alternative HTML version deleted]]
______________________________________________ R-help@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.