07 outubro, 2021
Consideremos um banco de dados com informações de um grupo de pessoas, tais como o nome, altura (cm), peso (kg), idade (anos), que segue:
dados <- data.frame(
nome = c("Paulo", "Maria", "Caio"),
altura = c(175, 167, 172),
peso = c(70, 65, 7500),
idade = c(32, 26, 19)
); dados
## nome altura peso idade
## 1 Paulo 175 70 32
## 2 Maria 167 65 26
## 3 Caio 172 7500 19
# Substituicao
dados[3, 3] <- 75; dados
## nome altura peso idade
## 1 Paulo 175 70 32
## 2 Maria 167 65 26
## 3 Caio 172 75 19
`[<-` <- function(x, i, value){
# Corpo da funcao
}
# Chamada de funcao
x[i] <- value
# Chamada de forma equivalente
`[<-`(x, i, value)
# Vamos criar um vetor de comprimento 10 x <- 1:10; x
## [1] 1 2 3 4 5 6 7 8 9 10
# Usando a funcao de substituicao, para alterar # dois valores na posicao 6 e 10 x[c(6, 10)] <- c(100, 200); x
## [1] 1 2 3 4 5 100 7 8 9 200
# Objeto x criado x <- 1:10 # `*tmp*` temporariamente criado `*tmp*` <- x # Alteracoes realizadas x <- `[<-`(`*tmp*`, c(6, 10), valor = c(100, 200)); x
## [1] 1 2 3 4 5 100 7 8 9 200
# Ao final se remove `*tmp*` rm(`*tmp*`)
# Vamos criar um vetor de comprimento 10 x <- 1:10; x ## [1] 1 2 3 4 5 6 7 8 9 10 # Inspecionando o objeto tracemem(x) ## [1] "<000000965C8A97D8" .Internal(inspect(x)) ## @0x000000965c8a97d8 13 INTSXP g0c0 [REF(65535),TR] 1 : 10 (compact) # Usando a funcao de substituicao, para alterar # dois valores na posicao 6 e 10 x[c(6, 10)] <- c(100, 200); x ## tracemem[0x000000965c8a97d8 - 0x000000965bdf6bc0]: ## tracemem[0x000000965bdf6bc0 - 0x000000965f177418]: ## [1] 1 2 3 4 5 100 7 8 9 200 # Inspecionando novamente o objeto .Internal(inspect(x)) ## @0x000000965f177418 14 REALSXP g0c5 [REF(5),TR] (len=10, tl=0) 1,2,3,4,5,...
# Funcao de substituicao de alterar os extremos
`substextr<-` <- function(x, value) {
x <- sort(x)
x[1] <- x[length(x)] <- value
x
}
# Criando o vetor
set.seed(10)
x <- rnorm(10)
# Inspecao
.Internal(address(x))
## <pointer: 0x000000000837d8b8>
# Alterando o vetor substextr(x) <- 100 # Inspecao .Internal(address(x))
## <pointer: 0x0000000008282f78>
`subst<-` <- function(x, i, value) {
x[i] <- value
x
}
set.seed(10)
(x <- c(1, 2, 3))
## [1] 1 2 3
# Inspecao
.Internal(address(x))
## <pointer: 0x0000000009fdc6f8>
# subst(x, i) <- value
subst(x, 2) <- 100; x
## [1] 1 100 3
# Inspecao
.Internal(address(x))
## <pointer: 0x000000000a03a690>