Objektumok elemeinek módosítása

Egy objektum elemeinek módosítása tulajdonképpen nem más, mint az indexálás és a hozzárendelés kombinációja.

  • példa egy mátrix oszlopának "felülírására"
mat <- matrix(1:4, 2, 2)
mat
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
mat[, 2] <- c(9, 10)
mat
##      [,1] [,2]
## [1,]    1    9
## [2,]    2   10
  • figyeljünk arra, hogy az R a módosításnál is reciklikál
(vec <- sample(10))
##  [1]  4  7 10  8  3  6  9  1  5  2
vec[1:4] <- c(100, 200)
vec
##  [1] 100 200 100 200   3   6   9   1   5   2
  • arra is figyeljünk, hogy az R-ben egy elemi vektor (ide sorolandó a mátrix és a tömb is) csak egyféle típusú (pl. csak integer vagy csak karakter) elemeket tartalmazhat -> az R ezt "észrevétlenül" kikényszeríti!
(vec <- 21:30)
##  [1] 21 22 23 24 25 26 27 28 29 30
typeof(vec)
## [1] "integer"
vec[1:4] <- 1
typeof(vec)
## [1] "double"
vec[10] <- "30"
typeof(vec)
## [1] "character"
  • ha egy objektum tulajdonságait meg akarjuk tartani, viszont az összes elemét ki akarjuk cserélni, érdemes lehet a következő "fogást" alkalmazni:
x <- array(1:9, c(3, 3), 
           dimnames = list(dimA = letters[1:3], dimB = LETTERS[1:3]))
x
##     dimB
## dimA A B C
##    a 1 4 7
##    b 2 5 8
##    c 3 6 9
x[] <- rnorm(9)
x
##     dimB
## dimA         A          B           C
##    a  1.081249  0.6823887 -0.09632429
##    b -1.251254  0.4101662  0.27467170
##    c  1.493776 -0.6730497 -1.87429927
# vesd ossze ezzel a megoldassal:
y <- rnorm(9)
y
## [1] -0.3065144 -0.8623442 -1.1901602 -0.7367186  0.4221241  0.1928385
## [7]  2.0713363 -0.2601257 -0.4304319
dim(y) <- dim(x)
dimnames(y) <- dimnames(x)
y
##     dimB
## dimA          A          B          C
##    a -0.3065144 -0.7367186  2.0713363
##    b -0.8623442  0.4221241 -0.2601257
##    c -1.1901602  0.1928385 -0.4304319