[R] Sequences

Stavros Macrakis macrakis at alum.mit.edu
Tue Apr 7 22:39:54 CEST 2009


I don't think I'm mixing up [[ and [.  Perhaps my explanation wasn't
perfect, but I was in fact trying to show the same differences you are
showing.

              -s

On Tue, Apr 7, 2009 at 2:01 PM, Bert Gunter <gunter.berton at gene.com> wrote:
> Aren't you mixing up [[ and [ ?
>
>> x <- 1:3
>> x[0]
> integer(0)
>> x[[0]]
> Error in x[[0]] : attempt to select less than one element
>> x[4]
> [1] NA
>> x[[4]]
> Error in x[[4]] : subscript out of bounds
>
> The docs say:
>
> "The default methods work somewhat differently for atomic vectors,
> matrices/arrays and for recursive (list-like, see is.recursive) objects."
>
> -- which we certainly see in the above differences. So even though both will
> do the same thing in certain circumstances (e.g. x[1] = x[[1]] = 1), [[
> should really be reserved for recursive (list-like) objects. Unfortunately,
> there are certain circumstances where you need to use [ on lists: for
> example, note that whether component names are preserved depends on how you
> do things:
>
>> y1 <- list(a=1:3)
>> y2 <- list(b=4,d=5)
>> c(y1,y2)
> $a
> [1] 1 2 3
>
> $b
> [1] 4
>
> $d
> [1] 5
>
>
>> c(y1,y2[1])
> $a
> [1] 1 2 3
>
> $b
> [1] 4
>
>> c(y1,y2[[1]])
> $a
> [1] 1 2 3
>
> [[2]]
> [1] 4
>
>
> I think the detailed  "explanation" of this behavior is that [[ selects a
> component, the atomic vector with single element 4,  while [ selects a list
> containing this atomic vector as it's first component with name "b". c()
> then does it's thing: in the first 2 cases, it just concatenates the two
> lists; in the third, it first creates a list containing the single unnamed
> atomic vector and then concatenates this with y1. Clarification/correction
> of this would be appreciated if I haven't got it right or am missing
> something important.
>
> I've found V&R's S PROGRAMMING helpful in clarifying some of these semantic
> complexities (and sometimes inconsistencies?), but I would appreciate any
> suggestions for other and especially more complete explanations of all of
> this, as V&R doesn't cover everything (and is more S language focused rather
> than R-centric in detail).  I think it's fair to say that the man pages do
> not provide all of the details, either. As a result, I still occasionally
> get bitten by these indexing subtleties (which, of course, may just be due
> to my dummheit).
>
> Cheers,
> Bert
>
>
> Bert Gunter
> Genentech Nonclinical Biostatistics
> 650-467-7374
>
>
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On
> Behalf Of Stavros Macrakis
> Sent: Tuesday, April 07, 2009 9:11 AM
> To: Melissa2k9
> Cc: r-help at r-project.org
> Subject: Re: [R] Sequences
>
> On Tue, Apr 7, 2009 at 8:13 AM, Melissa2k9
> <m.mcquillan at lancaster.ac.uk>wrote:
>
>>
>> I am trying to make a sequence and am  using a for loop for this. I want
> to
>> start off with an initial value ie S[0]=0 then use the loop to create
> other
>> values. This is what I have so far but I just keep getting error messages.
>>
>
> R only allows positive integer subscripts, and defines s[0] as the empty
> vector.
>
> You might think that assigning to an empty vector would give an error, but R
> semantics say instead that this is a no-op. This is so that things like s[
> <<some boolean condition>> ] <- value will assign the value to all elements
> of s meeting the condition -- while allowing for the possibility that none
> of them meet that condition.
>
> If you try to assign to an illegal individual element, however, you do get
> an error:
>
>     s[[0]] <- 45       # gives an error
>
> R's subscripting semantics are very convenient for many operations, but do
> take some getting used to.
>
>            -s
>
>        [[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.
>
>




More information about the R-help mailing list