`[< - `函数如何在R中起作用?

Emp*_*cer 8 r slice assignment-operator

例如,我见过几个人使用[<-波兰表示法作为函数

x <- matrix(1:4, nrow = 2)
`[<-`(x, 1, 2, 7)
Run Code Online (Sandbox Code Playgroud)

返回

     [,1] [,2]
[1,]    1    7
[2,]    2    4
Run Code Online (Sandbox Code Playgroud)

我试过玩[<-一点,看起来像这样使用它打印出的结果就像x[1,2] <- 7没有实际执行任务.但是我无法确定这个功能实际上是做什么的,因为给出的文档?"["仅提及它的传递,我不能搜索谷歌或SO"[< - ".

是的,我知道实际使用它可能是一个可怕的想法,我只是为了更好地理解R而感到好奇.

42-*_*42- 4

为了让作业坚持下来,你需要这样做:

 `<-`(    `[`(   x, 1, 2), 7)  # or x <- `[<-`(   x, 1, 2, 7)
 x
     [,1] [,2]
[1,]    1    7
[2,]    2    4
Run Code Online (Sandbox Code Playgroud)

本质上发生的事情是[创建一个指向 row-col 位置的指针x,然后<-(这实际上是也可以在中缀表示法中使用的同义词assign)正在执行实际的“永久”分配。不要误以为这是一个引用调用作业。我有理由确信仍然会x产生暂时的价值。

您的版本确实进行了子分配(从它返回的内容可以看出),但该分配仅在调用的本地环境中,[<-不包含全局环境。