R:关于LHS和RHS的分配和操作顺序的混淆

时间:2016-07-11 11:17:11

标签: r

我与R有一些基本的混淆。我有一段R代码。

> m <- 1:10
> m
 [1]  1  2  3  4  5  6  7  8  9 10
> dim(m) <- c(2,5)
> m
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10

现在我是一名C / Python程序员,而dim(m) <- c(2,5)行让我感到非常困惑。我意识到它有效地将矢量变成了矩阵,但是看着它我不理解逻辑/操作顺序。

<-是R中的赋值运算符。所以对我来说,逻辑上操作的顺序是:将(2,5)分配给dim(m)的输出。由于dim(m)的输出未分配给变量,因此输出将丢失。

有人可以解释我应该如何读取dim(m) <- c(2,5)行吗?操作顺序是什么?似乎使用<-进行操作的顺序取决于等式的LHS RHS。

1 个答案:

答案 0 :(得分:4)

这些是称为替换函数的特殊函数。我引用哈德利的高级R书:

  

替换函数的作用就像它们修改了它们的参数,并具有特殊名称xxx&lt; - 。它们通常有两个参数(x和value),虽然它们可以有更多,但它们必须返回修改后的对象。例如,以下函数允许您修改向量的第二个元素:

`second<-` <- function(x, value) {
  x[2] <- value
  x
}
x <- 1:10
second(x) <- 5L
x
#>  [1]  1  5  3  4  5  6  7  8  9 10
  

当R计算赋值second(x)&lt; - 5时,它注意到&lt; - 的左侧不是简单名称,因此它查找名为second&lt; - 的函数来进行替换。

您可以查看替换功能标题下的完整章节here