Помните, что в R вся операция - вызов функции (следовательно, также операции присваивания), и все, что существует, является объектом. Замещающие функции действуют так, как будто они изменяют свои аргументы на месте, например, в
colnames(d) <- c("Input", "Output")
. Они имеют идентификатор <-
в конце своего имени и возвращают измененную копию объекта аргумента (не примитивный функции замены) или тот же объект (примитивные функции замены)
В приглашении R следующее действие не будет работать:
> `second` <- function(x, value) {
+ x[2] <- value
+ x
+ }
> x <- 1:10
> x
[1] 1 2 3 4 5 6 7 8 9 10
> second(x) <- 9
Error in second(x) <- 9: couldn't find function "second<-"
Как вы можете видеть, R выполняет поиск в среде не для second
, а для second<-
. Итак, давайте делать то же самое, но вместо этого используем такой идентификатор функции:
> `second<-` <- function(x, value) {
+ x[2] <- value
+ x
+ }
Теперь задание во второй позиции вектора работает:
> second(x) <- 9
> x
[1] 1 9 3 4 5 6 7 8 9 10
Я также написал простой скрипт для перечисления всех функций замены в базовом пакете R, найти его здесь .