[R] question regarding vector ops
Uwe Ligges
ligges at statistik.uni-dortmund.de
Fri Apr 9 18:58:40 CEST 2004
Rajarshi Guha wrote:
> On Fri, 2004-04-09 at 12:03, Rajarshi Guha wrote:
>
>>Hi,
>> I was playing with some code and came upon this situation.
>>
>>
>>>x <- c(1, rep(0,9))
>>>x
>>
>> [1] 1 0 0 0 0 0 0 0 0 0
>>
>>>idx <- 1:10
>>>x[idx] <- x[idx] + 1
>>>x
>>
>> [1] 2 1 1 1 1 1 1 1 1 1
>>
>>This is expected. But if I do:
>>
>>
>>>x <- c(1, rep(0,9))
>>>x
>>
>> [1] 1 0 0 0 0 0 0 0 0 0
>>
>>>idx <- rep(0,10)
>>>idx
>>
>> [1] 0 0 0 0 0 0 0 0 0 0
>>
>>>x[idx] <- x[idx] +1
>>>x
>>
>> [1] 1 0 0 0 0 0 0 0 0 0
>
>
> Aah, I realize that the second code snippet is not supposed to work.
> What I meant was:
>
>
>>x <- c(1, rep(0,9))
>>x
>
> [1] 1 0 0 0 0 0 0 0 0 0
>
>>idx <- rep(1,10)
>>idx
>
> [1] 1 1 1 1 1 1 1 1 1 1
>
>>x[idx] <- x[idx] + 1
>
> [1] 2 0 0 0 0 0 0 0 0 0
>
> I expected that x would be
>
> [1] 11 0 0 0 0 0 0 0 0 0
>
> Or am I thinking about it wrong?
Yes, you are wrong: You are indexing 10 times the first value. Writing
10 times the same value 10 times into the same location does not sum it up.
Consider
x[idx] <- 1:10
Then you are writing 1 into x[1], 2 into x[1], 3 into x[1], ... and
finally 10 into x[1], hence at the end x[1] is 10.
Uwe Ligges
> Thanks,
>
> -------------------------------------------------------------------
> Rajarshi Guha <rxg218 at psu.edu> <http://jijo.cjb.net>
> GPG Fingerprint: 0CCA 8EE2 2EEB 25E2 AB04 06F7 1BB9 E634 9B87 56EE
> -------------------------------------------------------------------
> Disembowelling takes guts.
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
More information about the R-help
mailing list