dim()函数插入参数的约定

时间:2016-09-19 08:32:47

标签: r

对于java程序员来说,这行很难理解。我认为'< - ',运算符,是一个赋值运算符。但是我怎么能理解内部的子流程呢。 c(5,4)生成具有两个值的向量,然后该值如何传递给dim函数的输入?这个惯例对我来说不熟悉这个。

dim(m) <- c(5,4)  # Dimensions set to 5 & 4, so m is now a 5x4 matrix

3 个答案:

答案 0 :(得分:2)

这通常被称为&#34;句法糖&#34;。

R的对象在理论上是不可改变的。做类似的事情:

 dim(m) = c(4,5)

看起来正在改变m,但实际上语法树的编写方式如下:

m = D(m, c(4,5))

其中D是一个从另一个矩阵和一组新维构建矩阵的函数。之前的m现在可能已用于垃圾收集,名称m现在指向重新标注的矩阵。

这样的句法糖在R中用于对象似乎变异的大多数地方,例如a[1]=2,它在语法树中表示为a = B(a,1,2),其中B是构造函数,它从原始a创建一个向量,但第一个值设置为2。

注意:上述示例中的这些分配函数DB实际上在R中命名为dim<-[<-,我称之为DB为清楚起见,因为<-的函数名称看起来有点奇怪,但在R

中是完全可以接受的标识符

答案 1 :(得分:1)

执行dim(m) <- *后,您实际上正在调用不同的函数来设置m的维度。此功能为dim<-。它等同于以下内容:

m <- `dim<-`(m, c(5, 4))

所以会发生的是返回一个包含您指定尺寸的新矩阵。 R解析器处理将原始语法转换为dim<-调用的任务。

其他分配操作也会发生同样的情况,例如names(*) <-class(*) <-等。分配给子集时也会发生这种情况,例如m[a, b] <-:在这种情况下,函数为[<-

答案 2 :(得分:0)

你是对的<-是一个赋值运算符(几乎在所有情况下,它都与=运算符相同)。

运行时

dim(m) <- c(5, 4)

您实际上是在调用函数

dim<-

此功能甚至还有一个帮助页面?dim<-。所以

dim(m) <- c(5, 4)

相当于

m <- `dim<-`(m, c(5, 2))

这在R:

中很常见
# Vectors
x[1] = 10
## Data frames
df[1, 2] = 50