Any assignment statement in which the left side is not just an identifier
(meaning a variable name) is considered a replacement function. When
encountering this:
g(u) <- v
R will try to execute this:
u <- "g<-"(u,value=v)
Note the “try” in the preceding sentence. The statement will fail if you
have not previously defined g<-(). Note that the replacement function has
one more argument than the original function g(), a named argument value,
for reasons explained in this section.
In earlier chapters, you’ve seen this innocent-looking statement:
x[3] <- 8
The left side is not a variable name, so it must be a replacement function, and indeed it is, as follows.
Subscripting operations are functions. The function "["() is for reading
vector elements, and "[<-"() is used to write. Here’s an example:
> x <- c(8,88,5,12,13)
> x
R P r o g r a m m i n g S t r u c t u r e s 183
[1] 8 88 5 12 13
> x[3]
[1] 5
> "["(x,3)
[1] 5
> x <- "[<-"(x,2:3,value=99:100)
> x
[1] 8 99 100 12 13
Again, that complicated call in this line:
> x <- "[<-"(x,2:3,value=99:100)
is simply performing what happens behind the scenes when we execute this:
x[2:3] <- 99:100
We can easily verify what’s occurring like so:
> x <- c(8,88,5,12,13)
> x[2:3] <- 99:100
> x
[1] 8 99 100 12 13
đang được dịch, vui lòng đợi..