Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
3 views3 pages

Sub Setting

Uploaded by

akhilesh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views3 pages

Sub Setting

Uploaded by

akhilesh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

can you clearly tell me when we subset in which

cases it wil reduce its dimensions like list to vector


or datadram to vectr or list can you give when this
situation occurs in detail way
Excellent 🙌 this is the core confusion for most people when working with subsetting in R:
👉 Sometimes you get back the same shape as the original object (a smaller container),
👉 Sometimes R "simplifies" and returns the contents (lower dimension, like vector instead of
list/data.frame).
Let’s carefully break this down by object type.

🔑 General Rule for Subsetting


[→ returns the same kind of object as the input (list → list, df → df, vector → vector) →
unless simplification rules apply (esp. for matrices/data frames).
[[ → always extracts one element, removing the outer container.
$→ shorthand for [[ by name.

1. Atomic Vectors (numeric, character, etc.)

v <- c(10, 20, 30)

v[2:3] → vector (length 2) → no dimension change


v→ vector (length 1) → still same type (numeric vector)
v[] → single element 20 (scalar, but technically still a vector of length 1 in R)
👉 Summary: Vectors don’t lose structure with [ ]; only [[ extracts a single element directly.

2. Lists

x <- list(1:3, "a", 4:6)

x[1:2] → still a list (smaller train with 2 cars) → no simplification


x→ list of length 1 → still a list
x[] → contents of the first element (1:3, a numeric vector) → dimension reduced
👉 Summary:

[ ] on lists → always returns a list (same structure, fewer elements).


[[ ]] → extracts contents (can be vector, data frame, another list, etc.)

3. Data Frames (special case = list of equal-length columns)

df <- data.frame(a = 1:3, b = 4:6)

Case A: Using [ ] on columns by name


df["a"] → still a data frame with 1 column → no simplification
df[c("a","b")] → smaller data frame with 2 cols

Case B: Using [ , ] like a matrix


df[, "a"] → simplifies by default → vector (1,2,3)
df[, "a", drop=FALSE] → keeps as data frame (force no simplification)

Case C: Using [[ ]]

df[["a"]] → extracts the column contents as a vector


df$a → same as df[["a"]]
👉 Summary:

[ ] (with column names) → returns data frame.


[ , ] (matrix-style) → simplifies to lowest dimension possible by default, unless drop=FALSE.
[[ ]] or $ → extracts contents → vector.

4. Matrices

m <- matrix(1:9, nrow=3)

m[ , 1] → vector (default simplification, one column collapsed)


m[ , 1, drop=FALSE] → still a matrix with 1 column
m[1, ] → vector (one row)
m[1, , drop=FALSE] → 1-row matrix
👉 Summary:

[ ] on matrices → simplifies by default (dim drop)


Use drop=FALSE to preserve dimensions.
There is no [[ ]] for matrices (since they are not lists).

5. Cheat Sheet at a Glance ✅


Object With [...] With [[...]] With $

Always returns a vector (same Extracts 1 element (vector of length


Vector N/A
type) 1)

Extracts contents (vector, df, list, Shortcut for [[ ]]


List Returns a list (smaller train)
anything inside) by name

DataFrame df["a"] → data frame Extracts vector (column contents) Same as [[ ]]

df[, "a"] → vector


(simplified)

df[, "a", drop=FALSE] →


data frame

Simplifies by default: row/col →


Matrix N/A N/A
vector

drop=FALSE keeps matrix


structure

✅ Key Takeaway:

Lists never simplify with [ ]. Only [[ gets contents.


Data frames and matrices do simplify by default with [ , ]. Use drop=FALSE to preserve
structure.
Vectors are simple — both [ ] and [[ ]] give vectors, but [[ ]] insists on a single element.

👉 Do you want me to also make a visual diagram (like boxes-within-boxes) showing how [ ] vs.
[[ ]] peels away layers? That often clears up confusion instantly.

You might also like