Data Frames

  • Data frames are lists of vectors
  • So copying and modifying a column only affects that column
  • BUT if you modify a row, every column must be copied
d1 <- data.frame(x = c(1, 5, 6), y = c(2, 4, 3))
d2 <- d1
d3 <- d1

Only the modified column changes

d2[, 2] <- d2[, 2] * 2
ref(d1, d2)
#> █ [1:0x557c2e1b95f8] <df[,2]> 
#> ├─x = [2:0x557c2e1cdfd8] <dbl> 
#> └─y = [3:0x557c2e1cdd58] <dbl> 
#>  
#> █ [4:0x557c2e2707a8] <df[,2]> 
#> ├─x = [2:0x557c2e1cdfd8] 
#> └─y = [5:0x557c2e5f6848] <dbl>

All columns change

d3[1, ] <- d3[1, ] * 3
ref(d1, d3)
#> █ [1:0x557c2e1b95f8] <df[,2]> 
#> ├─x = [2:0x557c2e1cdfd8] <dbl> 
#> └─y = [3:0x557c2e1cdd58] <dbl> 
#>  
#> █ [4:0x557c2d5620b8] <df[,2]> 
#> ├─x = [5:0x557c2be96218] <dbl> 
#> └─y = [6:0x557c2be961c8] <dbl>