Avog - 10 months ago 35

R Question

I am a beginner in R. So I am experimenting with lists to understand R.

`x <- list(foo = 1:4, bar = 0.6)`

I am able to get the foo variable from x with

`y = x[1]`

`x`

`y`

`x`

`x[1]`

`y`

`y[1]`

`y[1]`

[1] 1 2 3 4

What are the differences between

`x`

`y`

Answer

`R`

can be confusing in this regard. The problem is that `x[1]`

gives you a list, not the values stored in the first element of the list.

Suppose `x <- list(foo = 1:4, bar = 0.6)`

, you can extract from x in two ways

You can subset by the index:
`x[[1]]`

will give you the values in the first vector while `x[1]`

will give you a list containing the first list in `x`

```
> x[[1]]
[1] 1 2 3 4
> x[1]
$foo
[1] 1 2 3 4
```

Beside `x[[1]]`

, you can subset `x`

by the name that you assigned, namely,

```
> x$foo
[1] 1 2 3 4
```

The reason `y = x[1]`

doesn't work is because you're not assigning the vector of values 1 to 4 to `y`

, you're passing a list. so `y`

is a list of length 1. Consequently, you wish to do

```
y=x[[1]]
```

or

```
y=x$foo
```

This way, you can subset `y`

as you desire:

```
> y[1]
[1] 1
```

HOWEVER, with you current method `y = x[1]`

, `y`

is a list, therefore, you can subset the `y`

like you would a normal list:

```
> y[[1]][1]
[1] 1
```

or

```
> y$foo[1]
[1] 1
```

Source (Stackoverflow)