Determining Index of Last Element in Vector

Determining Index of Last Element in Vector

Is there a way to specify the last element of a vector, similar to "end" in
MATLAB?

v[end]

would be MATLAB for

v(length(v))

in R.

While `v(length(v))' does yield the last element, that approach fails in the
following,

rep(v, each=2)[-c(1,length(v))]

which is meant to duplicate all elements of `v' except for the first and
last. (I.e., if `v <- 1:4', then we want '1 2 2 3 3 4'.)

So the question is, is there a better way specify the last element of a
vector? If not, is there a better way to duplicate all elements of a vector
except for the first and last? (I know you can achieve this using two
lines, but I'm writing because I want to do it using one.)

Re: Determining Index of Last Element in Vector

> Hi,
> Is there a way to specify the last element of a vector, similar to "end" in
> MATLAB?
> v[end]
> would be MATLAB for
> v(length(v))
> in R.
> While `v(length(v))' does yield the last element, that approach fails in the
> following,
> rep(v, each=2)[-c(1,length(v))]
> which is meant to duplicate all elements of `v' except for the first and
> last. (I.e., if `v <- 1:4', then we want '1 2 2 3 3 4'.)
> So the question is, is there a better way specify the last element of a
> vector? If not, is there a better way to duplicate all elements of a vector
> except for the first and last? (I know you can achieve this using two
> lines, but I'm writing because I want to do it using one.)
> Alan
>
> --
> Alan Lue
> Master of Financial Engineering
> UCLA Anderson School of Management
>

> Hi,
>
> Is there a way to specify the last element of a vector, similar to "end" in
> MATLAB?
>
> v[end]
>
> would be MATLAB for
>
> v(length(v))
>
> in R.
>
> While `v(length(v))' does yield the last element, that approach fails in
> the
> following,
>
> rep(v, each=2)[-c(1,length(v))]
>
> which is meant to duplicate all elements of `v' except for the first and
> last. (I.e., if `v <- 1:4', then we want '1 2 2 3 3 4'.)
>
> So the question is, is there a better way specify the last element of a
> vector? If not, is there a better way to duplicate all elements of a
> vector
> except for the first and last? (I know you can achieve this using two
> lines, but I'm writing because I want to do it using one.)
>
> Alan
>
> --
> Alan Lue
> Master of Financial Engineering
> UCLA Anderson School of Management
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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.
>

Re: Determining Index of Last Element in Vector

> Hi,
>
> Is there a way to specify the last element of a vector, similar to "end" in
> MATLAB?
>
> v[end]
>
> would be MATLAB for
>
> v(length(v))
>
> in R.
>
> While `v(length(v))' does yield the last element, that approach fails in the
> following,
>
> rep(v, each=2)[-c(1,length(v))]
>
> which is meant to duplicate all elements of `v' except for the first and
> last. (I.e., if `v <- 1:4', then we want '1 2 2 3 3 4'.)

v <- 1:4

rep(v, c(1, rep(2, length(v) - 2), 1))
[1] 1 2 2 3 3 4

> So the question is, is there a better way specify the last element of a
> vector? If not, is there a better way to duplicate all elements of a vector
> except for the first and last? (I know you can achieve this using two
> lines, but I'm writing because I want to do it using one.)
>
> Alan

Re: Determining Index of Last Element in Vector

On Apr 25, 2010, at 2:22 PM, Chuck Cleland wrote:

> On 4/25/2010 2:10 PM, Alan Lue wrote:
>> Hi,
>>
>> Is there a way to specify the last element of a vector, similar to
>> "end" in
>> MATLAB?
>>
>> v[end]
>>
>> would be MATLAB for
>>
>> v(length(v))
>>
>> in R.
>>
>> While `v(length(v))' does yield the last element, that approach
>> fails in the
>> following,
>>
>> rep(v, each=2)[-c(1,length(v))]

Cleland's example works, but I thought you might be interested in
ideas about why your approach did not. The length of you rep-ed vector
was twice as long as the original so this method, which only adds a
factor of two to the length argument, succeeds: